분류 전체보기 93

스프링에서 싱글톤으로 관리하는 빈의 생성주기

스프링 빈 생성주기에 대해서 배웠다. 정확히는 스프링에서 싱글톤으로 관리하는 빈에 대한 생성주기였다. 스프링 컨테이너 생성 스프링 컨테이너의 생성은 말 그대로 Application Context(이하 스프링 컨테이너)의 생성이다. 빈 객체 등록 스프링 컨테이너가 생성되면 빈 객체 등록이 이뤄진다. 이때, 빈이 생성자 주입을 사용하도록 되어있다면, 필요한 의존관계가 빈 객체등록 시점에서 이뤄진다. 의존관계 주입 만약 모든 의존관계가 다 생성자 등록이라면 빈 객체등록이 끝나는 시점에 의존관계 주입도 이미 끝나있을 것이다. 이 의존관계 주입단계에서는 수정자 주입이나, 필드주입을 받는 빈이 주입을 받는다. 초기화 콜백 위 단계에서 의존관계가 주입된 빈들은 초기화 콜백이 수행된다. 초기화 콜백은 Initializ..

Web/Spring 2023.01.26

인텔리제이는 생각보다 더 많은 도움을 준다.

평소에 인텔리제이에 IdeaVim을 켜서 쓰는 편이다. 그것만으로 충분히 좋은 IDE라고 생각했는데 최근에 김영한님의 스프링 강의를 들으면서 더 강력한 기능들을 많이 배울 수 있었다. 그래서 좋은거 나눠가지자는 생각으로 내가 쓰는 좋은 기능들을 함께 공유하고자 한다. 내 키보드는 capslock의 위치에 ctrl이 들어가있다. 이걸 감안하고 보길 바란다. 그리고 나는 Mac 유저다. 그러니 윈도우 유저들은 기능만 참고하고 위치는 알아서 쓰면 된다. Keymap Tool window 화면 전환과 관련된 키맵들이다. run 현재 실행중인 어플리케이션의 출력물을 확인할 수 있다. 테스트코드를 돌리고 있었다면 테스트 코드, 어플리케이션 코드를 작성하고 있었다면 어플리케이션 코드를 볼 수 있다. cmd + 4 g..

Web 2023.01.25

스프링 컨테이너

기존에 사용했던 Nest.js와 Flutter 에서 의존관계를 관리했던 방법 Nest.js를 쓰거나 Flutter 로 어플리케이션 개발을 할때는 DI를 구현해서 사용했다. Flutter 로 DI를 구현해서 사용했을때에는 Service Locator라는 라이브러리를 사용해서 어플리케이션 실행 시점에 ServiceLocatorInitializer(가칭)에서 의존관계를 조립해서 모든 의존관계를 ServiceLocator에 주입해두고 꺼내서 썼다. 어디에서 어떻게 의존관계가 관리되는지는 명확했다. Nest.js를 쓸때는 초기화된 결과들이 저장되는 곳은 몰라도, @Module을 통해서 어떤 모듈이 서로 참조하고, 노출되는 Provider는 어떤것이 있는지 알 수 있었다. 스프링은 어떻게 의존관계를 관리하지? 내가..

Web/Spring 2023.01.24

최근 변한 삶

이번에 학교의 마지막학기를 마무리하면서 티맵의 광고 개발팀에 합류했다. 3학년 2학기 이후로는 프리로만 일을 해왔기 때문에 조직에 적응하는게 어색하기도 하다. 팀원분들이 친절하시고 광고 도메인에 깊은 경험이 있기 때문에 마음이 좋다. 이제 마음에 좀 여유가 생겨서 입사후 3주 시점에 느낀 점에 대해서 몇가지 적어보려고 한다. 변한 점 세가지 1. Spring 생태계에 입문 최근 2년동안 Typescript, nest.js로 업무를 진행해왔고, 사실 티맵에 합류했을때도 Nest.js로 작업을 진행했었다. 현재 일하는 부서에서는 자바 스프링으로 개발을 하고 있다. 스프링이 한국 IT에서는 많은 기회가 있기 때문에 커리어발전의 기회로 삼을 수 있어서 기쁘다. 스프링 공부는 인프런의 김영한님의 강의를 통해서 주..

회고록 2023.01.23

2022/11/08 TIL

JPA 프로그래밍 702 페이지까지 읽었다. 컬렉션과 부가기능 고급 주제와 성능 최적화 부분을 다 읽었고 트랜잭션과 락, 2차캐시 파트를 읽기 시작했다. 컬렉션과 부가기능 컬렉션의 경우 셋과 리스트를 이용하는 방법과 이 둘을 사용할때 hashcode와 equals 메쏘드가 어느 시점에 사용되는지 배웠다. Order by와 Order column에 대해서 배웠고, 오더 컬럼이 프로그램쪽에서 컨트롤하는 방법, 오더 바이가 데이터베이스의 order by를 사용하는 것이라는 것을 배웠다. Converter는 typeorm에서 transformer 와 유사한 역할을 하는데, 객체에 저장한 값을 다른 값이나 형태로 매핑하여 쓸수 있게 해주는 방법이다. 데이터들을 저장할때에는 이벤트들이 발생하는데, 영속화하기전,후,..

TIL 2022.11.09

2022/11/01 TIL

JPA 프로그래밍 610페이지 까지 읽었다. 스프링 데이터 JPA 부분을 마무리하고 웹 어플리케이션과 영속성 관리를 다 읽었다. 그리고 컬렉션 타입쪽에 들어가기 시작했다. 웹 어플리케이션과 영속성 관리 쪽에서 궁금한 부분이 많았는데 이번에 많은 부분을 해소할 수 있어서 좋았다. 트랜잭션이 같으면 같은 영속성 컨텍스트가 적용되는 부분과 다르면 다른 영속성을 사용한다는것, 준 영속상태와 지연로딩으로 인해서 발생하는 지연로딩 문제나, 미리 로딩해주기 위해서 발생하는 노고 등에 대해서 배웠다. 그리고 이를 해결하기 위해서 OSIV를 사용한다는 것과 OSIV에서 발생할 수 있는 문제들을 배웠다. ** OSIV의 초기 모델인 요청당 트랜젝션의 경우 컨트롤러단에서 정보를 수정할 경우 영속성 컨텍스트의 변경감지로 인해..

TIL 2022.11.01

2022/10/31 TIL

JPA 프로그래밍 560페이지 까지 읽었다. 중간에 스프링 웹 서비스 개발하는 부분은 이미 김영한님의 강의영상을 통해서 구현해본 부분이라서 넘어갔다. 공부한 내용은 영속성 컨텍스트와 JPQL, 그리고 스프링 데이터 JPA 관련된 내용을 배웠다. 스프링 데이터 JPA에서 네임드 쿼리를 이용하여 JPQL을 사용한다는 부분이 기억에 남았다. C레벨의 탄생 도서관에서 눈에 띄어서 집었다. C레벨에 도달한 사람들은 어떤 고민을 할까?이런 생각이 들었는데, 이 책에서 이야기하는 내용은 C레벨에 도달했을때 미션을 성공적으로 수행하는 방법에 대해서 알려주는 책인듯 하다. 오늘 70페이지까지 읽었고, 기억에 남는 부분은 입사전에 회사 내부에 대한 정보를 얻는 부분이 기억에 남았다. 전에 모젯에서 근무했을때 승기님이 CO..

TIL 2022.10.31

2022/10/29 TIL

JPA 프로그래밍 460페이지 까지 읽었다. Criteria와 queryDsl, nativeSql을 사용하는 방법에 대해서 배웠다. queryDsl이 Criteria보다 쓰기 간편하다고 느껴졌다. 그리고 벌크 수정을 하는 경우 영속성 컨텍스트를 통해서 업데이트하는 것이 아니라 바로 sql을 실행하는 것이므로 이때 영속성이 깨지는 문제를 해결하는 팁도 몇가지 배웠다. 이 방법은 세가지가 기억에 남았는데 첫 번째는 가장 먼저 벌크연산을 하고 이 후 영속성 컨텍스트를 사용하는 것이다. 두 번째는 벌크 연산을 한 이후 엔티티 매니저를 통해서 엔티티를 리프레시(em.refresh()) 해주는 것이다. 이러면 데이터베이스에서 정보를 다시 조회해온다. 세 번째는 벌크 연산 이후 영속성 컨텍스트를 초기화하는 것이다. ..

TIL 2022.10.29