전체 글 (56) 썸네일형 리스트형 내배캠 13주 2일 차 오늘도 프로젝트를 진행했다. 오전에는 각자 작업한 코드 리뷰를 진행하고 오후에는 각자 맡은 캐시 작업을 진행하기로 했다. 내가 맡은 파트는 db에서 인기 키워드 목록을 가져와서 캐시에 저장한 후 반환하는 작업이었다. 구현하는 것은 @Cacheable 어노테이션을 이용하면 어렵지 않아서 금방 구현했다. 그러나 문제는 다른 팀원이 맡은 부분이었다. 팀원이 해야하는 부분이 키워드로 검색을 할 때 키워드를 모아서 한번에 db에 저장하는 방식인 write back 방식을 택했다. 이를 어노테이션을 이용해서 어떻게 구현하지가 문제였다. 일단 @Cacheable은 캐싱이 되었으면 메소드 로직을 실행하지 못 하니 @CachePut를 이용해야 했다. 그런데 캐시에 담아 놓은 데이터를 어떻게 가져올 것인지 또는 캐시할 .. 내배캠 13주 1일 차 오늘도 하루 종일 프로젝트를 진행했다. 오전에 팀원끼리 회의하고 코드 리뷰 및 리팩토링 하는데 시간을 다 보냈다. 오후에는 각자 캐싱을 맡아서 진행하기로 했는데 이 과정에서 문제가 생겼다. 캐싱에는 읽기와 쓰기 전략이 있는데 읽기의 read through 전략을 구현할 때 문제가 생기게 됐다. 일단 read through 전략이 무엇이냐면 서버에서 먼저 캐시에 데이터가 있는지 확인한다. 그리고 캐시에 데이터가 있으면 그대로 반환하고 만약 없을 경우 캐시에서 직접 db에 요청을 보내 데이터를 가져오고 캐시에 저장 후 서버에 반환한다. 과정은 이해가 된다. 그러나 이걸 구현하려면 어떻게 해야 하나 문제였다. 서버에서 캐시를 확인 후 db에 요청을 보내면 이건 look aside가 되기 때문이다. 검색.. 내배캠 12주 5일 차 오늘은 프로젝트 기초를? 끝내려고 열심히 했다. 딱히 새로운 내용이 나온 건 없고 구현 안 되는 것을 구현하는데 집중했다. 그 과정에서 그나마 하나 정도 건질만한 게 있을 거 같아서 간단하게 써본다. 두 테이블이 M:N 관계로 다대다 관계여서 중간 테이블을 하나 뒀다. A와 B테이블이 있으면 C테이블이 중간 테이블이 되어서 A : C = 1 : M / B : C = 1 : N이었다. 따라서 A : B = M : N이다. A 테이블을 조회할 때 B 테이블을 같이 조회해서 B 테이블의 값 하나를 List 형태로 가져오려 했으나 이 과정이 쿼리로 잘 안 됐다. 따라서 A와 B 테이블의 값을 각각 따로 조회 후 매칭 되는 값끼리 묶으려고 했다. 문제는 여기서 발생했다. 내가 생각했던 방법은 반복문을 통해서 .. 내배캠 12주 4일 차 오늘은 하루 종일 코드 리뷰와 에러 수정하는데 시간을 보냈다. 그래서 따로 공부한 것은 없지만 그래도 중간에 배워야 할 키워드가 몇 개 나왔다. 오늘의 키워드는 제네릭 타입, 프로젝션 정도가 될 거 같다. 에러에 관해서는 아래에 간단하게 정리를 해보겠다. 에러는 무엇이 있었냐 크게 3가지 정도가 있을 거 같다. 2개는 귀엽지만 1개는... 아직 이유를 몰라서 내일 시간을 들여서 찾아봐야 할 거 같다. 1번 에러는 API를 실행하면 컨트롤러에 넘어가기 전에 에러가 발생했다. 이유를 찾아보니 시큐리티 필터에서 로그인 했을 때 JWT 토큰에서 사용자 정보를 저장해야하는데 이때 페이로드(Payload)에 있는 값을 잘못 꺼내서 NullPointException이 발생했다. 따라서 올바른 이름으로 지정하니 .. 내배캠 12주 3일 차 오늘의 키워드는 캐시와 DDD와 테스트 코드이다. 그럼 각각 왜 나왔는지에 대해 간단히 적어보겠다. 캐시와 DDD는 각각 튜터님이 학생들 대상으로 진행한 튜터링(강의) 시간에 나왔던 내용이다. 그리고 테스트 코드는 오늘 service 테스트 코드를 작성하다가 단일로 테스트를 돌릴 때는 괜찮은데 여러 개를 한 번에 실행하면 안 되기에 했기 때문에 포함했다. 이번에 작성해 볼 것은 테스트 코드와 캐시에 대해서 간단하게 적어 볼까 한다. 캐시는 영어로 Cache라고 하고 뜻은 고속 기억 장치(네이버 사전)라고 한다. 그럼 캐시를 왜 사용할까? 자주 사용되는 데이터가 있다면 매번 db 또는 저장소에 가서 데이터를 찾아서 가져오고 사용자한테 보여주는 것은 은근히 시간이 걸린다. 그럼 자주 사용되는 데이터를 다른.. 내배캠 12주 2일 차 오늘부터는 작성방식을 조금 바꿔보려고 한다. 먼저 하루 동안 배웠거나 궁금한? 단어 등을 적고 그에 대한 내용을 적는 방식으로 해보려고 한다. 왜 이런 방식으로 하려고 하냐면 그날 나왔던 단어를 적어서 나중에 글을 봤을 때 아 저런 것도 있었지라고 되새길 수 있기 때문이다. 만약 정리했으면 그 글을 다시 보거나 정리를 안 했으면 그 내용을 찾아보려고 하기 때문이다. 오늘 하루는 새로운 프로젝트 주의 시작이여서 새롭게 팀이 편성되고 이번 주차 발제를 듣고 팀원들과 어떤 프로젝트를 할지 정하는 시간이었다. 발제 때 나왔던 키워드는 "동시성 제어"와 "캐시"가 나왔다. 프로젝트 기획을 하면서 나왔던 내용이 JWT 토큰에서 리프레시 토큰이 나와서 개념은 아는데 이걸 활용하는 방법을 몰라서 궁금해졌다. 마지막으.. 내배캠 12주 1일차 오늘은 테스트 코드를 작성하는데 문제점이 있어서 그것에 대해 다뤄보려고 한다. 문제점은 @SpringBootTest을 이용해서 테스트 할 때 빈을 생성하지 못 한다는 이유였다. 왤까 하고 에러 메시지를 확인해 보니 @Value(`경로`)에서 경로를 못 읽어 오는 것이었다. 왜 경로를 못 읽어 올까? 해서 확인 해 보니 application.yml 파일에 다음과 같은 설정이 돼 있었다. spring: config: activate: on-profile: test 이게 뭘까 했더니 이 yml 파일이 실행되려면 test일 때 실행이 가능하다는 것이었다. 따라서 테스트 코드를 작성할 때 다음과 같은 옵션?을 줘야 yml 파일이 활성화가 된다. @ActiveProfiles("test") 처음에.. 내배캠 11주 5일 차 오늘은 테스트 코드를 왜 작성해야 하는지에 대해서 공부를 했다. 테스트 코드는 왜 작성해야 할까? 사람이 개발한 소프트웨어(프로그램)을 만들다 보면 제대로 동작하는지 문제는 없는지를 확인하기 위해서 테스트를 한다. 그런데 매번 프로그램이 잘 되는지 확인하기 위해서 여러번 테스트를 하다 보면 은근히 시간이 오래걸리고 그러다보면 테스트를 점차 안하게 된다. 따라서 테스트 코드를 작성해 테스트를 자동화 할 수 있다. 새로운 기능이 생겼을 때 그 것만 테스트 하는 것이 아니라 전체에 대해서 해야한다. 이 과정이 쌓이다 보면 점차 테스트를 안하게 된다. 물론 프로그램 규모가 작으면 시간을 내서 전체적으로 테스트를 할 수 있지만 규모가 커지면 한 번 테스트 하는데 전부 확인한다고 하면 골치아플것이다. 그러니 테.. 이전 1 2 3 4 ··· 7 다음