| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- kotiln const
- go
- kotiln const val
- 백준 2252 줄세우기
- ipfs bean
- nodejs rabbitmq
- spring mongoTemplate switch
- Claude Intelij 연결
- Java Call By Refernce
- java 1509
- 백준 연결요소 자바
- Spring ipfs
- 자바 백준 팩토리얼 개수
- 익명 객체 @transactional
- 백준 특정한 최단 경로
- spring mongodb
- java 1238
- rabbitmq 싱글톤
- 백준 1504 java
- java 백준 1509
- javav 1676
- java 파티
- java 팩토리얼 개수
- 자바 1676
- 안정해시
- spring mongoTemplate
- mongodb lookup
- kotiln functional interface
- ipfs singletone
- spring mongodb switch
- Today
- Total
목록분류 전체보기 (199)
공부 흔적남기기
웹개발 프로젝트 경험이 필요하여 항해 99 부트캠프에 참여하게되었습니다. 항해99는 기술을 많이 알려준다는 느낌보다 기술은 스스로 터득하고 팀원들과 함께 여러 프로젝트를 진행하는 방식입니다. 따라서 코딩에 대한 지식이 없으신분은 미리 예습을 한 뒤 도전하시는 걸 추천드립니다. 항해99동안 많은 경험을 쌓았습니다. 협업 경험 매주 팀원이 바뀌고 다양한 분들과 함께 협업함으로써 커뮤니케이션 스킬을 높이고 코드를 어떻게 합치는지 프론트와는 어떤식으로 협업을 해야하는지 배웠습니다. 추가로 팀원분들과 함께 스터디를 하고 함께 모르는 것을 찾아내고 공부하면서 많이 성장할 수 있었습니다. 내가 항해99를 진행하며 얻은 것들 저는 항해99를 하기 전에는 기초적인 프로그래밍을 할 줄 아는 수준이었습니다. 항해99를 수료..
데드락이란? 프로세스가 자원을 얻지 못해서 다음 처리를 하지 못하는 상태( 교착상태 ) 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다. 예를들어 프로세스 A와 B가 있고 자원 a와 b가 있다고 가정하고 A는 a를 사용하고 있었고 B는 b를 사용하고 있었는데 A는 b가 필요해지고 B는 a가 필요해질때 서로 프로세스가 끝나길 기다리기 떄문에 무한 wait상태에 빠지게 되는데 이를 DeadLock이라 한다. 데드락이 발생하는 경우 멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 프로세스들이 경쟁하는 경우 데이터를 사용 처리할 수 없는 상황 대기 상태로 들어간 프로세스들이 실행 상태로 변경될 수 없을때 발생함 발생 조건 상호 배제 : 자원은 한번에 한 프로세스만 사용할 수 있다. 점유 대기..
어노테이션이란? @을 이용한 주석을 달아 특별한 의미를 부여하는 것이다. 메타데이터라고도 불리며 클래스나, 메소드, 변수에 임베디드되어 사용된다. 사용하는 이유? 프로그램의 규모가 방대해지만셔 설정 정보가 많아짐 컴파일러에게 코드작성 문법에러를 체크하도록 정보제공 빌드나 배치시 코드 자동으로 생성할 수 있도록 정보제공 코드실행시 특정기능을 실행 할 수 있도록 정보제공 장점? 재사용성, 다양한 기능들을 제공하기 떄문에 개발에 편리하다. JAVA에서 기본적으로 제공하는 어노테이션 종류 @Override 선언한 메서드가 오버라이드 되었다는 것을 나타냅니다. 만약 상위(부모) 클래스(또는 인터페이스)에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생 시킵니다. @Deprecated 해당 메서드가 더 이상 사..
제네릭이란 다양한 타입의 객체에 재사용을 높일 수 있는 기법으로 클래스에서 사용할 타입을 외부에서 설정하는 것을 의미한다. 선언 시 클래스 또는 인터페이스에 를 붙이고 타입파라미터를 지정하면 된다. 제네릭을 사용하지 않을 경우 빈번한 타입 변환이 발생할 수 있으며 이는 성능을 저하시킨다. 제네릭 클래스 class GenericClass { private T t; public void setT(T t) { this.t = t; } public T getT() { return t; } } public class Main{ public static void main(String[] args){ GenericClass gc = new GenericClass(); gc.setT("abc"); System.out...
JPA란? JPA는 ORM 기술 표준으로 객체를 관계형 데이터베이스 매핑해주는 기술입니다. JPA를 사용하는 이유 생산성 지루하게 짜던 반복전인 SQL을 JPA를 통해 대신 처리할 수 있습니다. SQL 중심적인 개발을 객체 중심으로 개발할 수 있습니다. 유지보수 SQL을 직접 다루면 엔티티에 필드를 하나만 추가해도 등록,수정,조회 SQL과 결과를 매핑하기 위한 JDBC API코드를 작성해야하는데 JPA가 대신 처리해주므로 유지보수해야 하는 코드수가 줄어듭니다. JPA 성능 최적화 기능 1차 캐시와 동일상 보장 (캐싱 가능) 트랜잭셕을 지원하는 쓰기지연(버퍼링 기능) 지연로딩 즉시로딩 패러다임 불일치 해결 JPA는 상속, 연관관계, 객체 그래프 탐색, 비교하기와 같은 패러다임의 불일치 문제를 해결해줍니다...
우리는 왜 그렇게 객체지향 코드를 짜기 위해 노력하는가? 회사A가 있다고 가정해보자 회사 A는 이제 막 시작한 스타트 업으로 코드에 변경과 수정에 대한 부담이 없고 빠른 결과를 원한다. 따라서 절차 지향적으로 빠르게 코드를 짜기 시작했고 좋은 성과를 얻게되었다. 좋은 성과에 따라 새로운 여러 비즈니스 요구사항들이 들어오기 시작했다. 시간이 갈수록 절차지향적으로 짠 코드를 변경/수정하는데 많은 비용이 들기 시작한다. 많은 비용을 줄이기 위해선 변경과 수정에 들어가는 비용을 줄여야한다. 그럼 변경과 수정을 줄이기 위해선 어떻게 해야하는가? 당연희 여러 방법이 있겠지만 대표적으로 객체지향적으로 코드를 짜면된다.! 간단히 말해 소프트웨어의 중심은 변화이다. 이 변화를 좀 더 쉽게 다가가기 위해선 객체지향적 코드..
단일책임원칙이란 SOLID 원칙에서의 S로 하나의 메소드, 클래스는 하나의 책임만을 가져야 한다는 원칙이다. 이번 프로젝트를하면서 SOLID원칙을 지키고자 했지만 사실 빨리 개발하느라 바뻐 SOLID원칙은 거의 지키지 못한것 같다. 이번 프로젝트에서 어떤 로직을 충족하면 점수를 주거나 알람을 보내는 로직이 있었다. 일정 로직이 충족되는 로직과 알람을보내거나 점수를 보내는 로직이 한 메소드 안에 들어있어 코드가 너무 복잡했고 절대로 남이 봐서는 이해할수 없을 것 같은 코드였다. 이에 대한 해결책으로 ApplicationEventPubliser을 이용해 Event를 만들고 EventListener를 통해 일정 이벤트가 충족되었을때 새로운 일정 로직이 시작되도록 하여 한 메소드를 이벤트 기준으로 나누었다. 즉..
이번에 새로운 프로젝트를 하면서 JPA를 사용하여 쿼리를 사용하였다. 맨처음 개발할때 아무생각없이 spring data jpa 인터페이스를 통해 마구잡이로 개발하여 n+1 문제가 안나오는 곳을 찾을수가 없었다. 그래서 N+1문제가 문제가 뭔데 N+1문제는 select문을 1개를 날리겠다는 의도로 쿼리를 했지만 추가로 N번의 쿼리가 생기는 문제이다. 이 문제는 entity간의 연관관계 때문에 일어나게 된다. N+1문제를 트러블 슈팅하기전에 먼저 FetchLazy와 FetchEager에 대해 알아보자 Lazy와 Eager의 설정은 하나의 엔티티를 select할떄 엔티티와 연관관계가 맺혀진 엔티티를 어떻게 처리할 것인지 정하는 설정이다. Eager로 설정하게 되면 연관관계가 맺혀진 모든 엔티티를 한번에 다 가..
프로젝트를 하면서 유저들간 실시간 채팅방이 필요해 WebSocket,Stomp,Redis를 활용하여 채팅방을 구현하였습니다. 간단한 구조를 먼저 설명하자면 프론트쪽에서 HTTP를 통해 소켓연결을 하면 소켓 프로토콜이 연결되면서 실시간으로 서버와 클라이언트가 연결되게 된다. 클라이언트는 Request가 없어도 Response를 받을 수 있는 구조를 가지게 된다.간단히 순서를 알아보면엔드포인트에 프론트가 소켓통신을 위한 신호를 보내 서버가 OK신호를 보내면 소켓 connect가 된다.connect가 되면 프론트가 subscribe destination과 유저정보를 가진 요청을 보내고 데이터가 올떄까지 기다린다.앞으로 데이터를 subscirbe destination에 받는다.클라이언트는 send를 통해 pub..