본문 바로가기
728x90

TIL61

[240113] MapStruct unmapped 오류 수정 이번 프로젝트에서 객체와 dto간의 변환을 위해 MapStruct를 사용하였다. 생성자를 이용하여 변환해주는 방법이 있지만 새로운 라이브러리를 활용하고 익숙해지는 연습을 하고, 코드를 더 깔끔하게 작성하여 가독성을 높이기 위해 적용해보았다. 그러던 중 게시글 관련 기능을 개발하던 중에 오류 메세지를 마주하게 되었다. 에러 메세지: nickname 필드를 매핑하지 못하고 있다. Unmapped target property: "nickname". Mapping from property "Board reportBoard.board" to "BoardGetRes reportBoardGetRes.board". Unmapped target property: "nickname". Mapping from Collect.. 2024. 1. 13.
[240111] Docker image, Docker container Docker Image 라이브러리, 종속성에 대한 정의, 코드가 포함되어 있는 실행되지 않은 OS 파일 컨테이너 런타임에 필요한 바이너리, 라이브러리 및 설정 값 등을 포함 변경되는 상태값을 보유하지 않고 변하지 않음(stateless, immutable, read-only) 상태 저장 없음(Stateless): 다른 환경에서도 동일한 애플리케이션을 실행 가능 불변성(Immutable): 이미지가 한 번 생성되면 변경할 수 없음 필요한 파일만 포함하고 있어 용량이 작음 Docker Image 실습 docker pull [name:tag]: 도커 허브에서 이미지 내려받기 Private Registry 서버를 통해 이미지를 제공받거나 제공 가능 # docker [image] pull [options] nam.. 2024. 1. 11.
[240110] CI/CD 공부 (1) CI CI/CD란? Continuous Integration/Continuous Deployment(Delivery)의 약자로, 지속적인 통합과 지속적인 제공을 의미 기본 개념 지속적인 통합(Continuous Integration): 자동화된 빌드와 자동화된 테스트를 제공 지속적인 서비스 제공 (Continuous Delivery) 지속적인 배포(Continuous Deployment): 배포를 자동화하여 배포 시간을 단축하고 코드 결과물을 빠르게 지속적으로 제공 왜 Docker? 애플리케이션 개발과 배포가 편해짐 Docker Container 내부에서 여러 소프트웨어를 설치해도 호스트 OS에 영향이 없음 CI 과정의 테스트에서 Docker를 활용 어떤 서버에 올려도 같은 환경으로 구성된 컨테이너로 동작하기.. 2024. 1. 10.
[240108] Refresh Token 구현 전의 고려 사항 토큰 방식을 사용하는 이유 상태를 서버에 저장하지 않으므로 확장성이 좋음 서버 간의 데이터 동기화 문제를 해결하기 쉬움 -> 하지만 백엔드만 구현하는 프로젝트에서는 refresh token을 서버에서 저장함 RefreshToken을 사용하는 이유 만료기한이 짧은 access token만 사용하는 경우 사용자가 토큰이 만료될 때마다 로그인해야 하는 불편함을 겪게 됨 자동 로그인 구현으로 편의성 증가 Access token의 수명을 짧게 하여 accesstoken 노출되더라도 짧은 시간 내에 만료되게 함으로써 보안성을 높일 수 있음 백엔드 프로젝트에서의 Refresh Token 구현 Redis를 사용하는 이유 인메모리 DB로 빠른 응답이 가능 TTL을 지원하여 토큰의 만료시간을 지정하고 관리하는데 유용함 K.. 2024. 1. 8.
[240106] permitAll()과 shouldNotFilter 프로젝트를 해오면서 사용자의 권한이 필요하지 않은 요청의 경우 WebSecurityConfig에서 permitAll()을 통해 허가해주었다. 하지만 이렇게 설정한 api에 대해서도 성공적으로 반환값이 돌아오지 않는 경우가 있었다. 바로 유효하지 않은 JWT 토큰이 헤더나 쿠키에 들어가 있는 경우이다. permitAll()을 설정해줬을 경우에는 잘못된 토큰이 들어있는 경우에도 요청을 허가해줘야 하는 것이 아닌가? 라는 생각이 들어서 이에 대해 공부해보았다. 문제 상황 WebSecurityConfig 일부 @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { // CSRF 설정 http.csrf((c.. 2024. 1. 6.
[240104] 심화 프로젝트 마무리 :: 트러블 슈팅 심화 프로젝트 발표를 준비하면서 팀원들이 경험한 트러블 슈팅에 대해서 정리해보고자 한다. 카테고리 및 카드 정렬 문제 칸반보드 협업 툴인 Trello와 비슷한 칸반보드 서비스를 구현하는 프로젝트이기 때문에 카드와 카테고리를 드래그해서 움직이면 해당 카드와 카테고리의 순서가 바뀌게 된다. 이를 구현하는 과정에서 어떤 방법을 사용하는 것이 좋은지에 대한 문제에 부딪히게 되었다. 제안된 방식들 컬럼 테이블의 필드로 json으로 카드 순서를 저장 ex) [1,2,3,4,5] -> [1,2,4,3,5] 카드 테이블의 필드로 전, 후의 카드id를 저장 - 최대 4번 요청 순서 테이블을 만들어서 이용 (1, 2번을 혼합) 변경 전후의 seq 값을 더해서 2로 나눔 일주일이라는 주어진 시간 안에 구현해야 하는 기능이 .. 2024. 1. 4.