본문 바로가기

📕 Spring Framework/Spring Project44

2022.05.20 《스프링 부트 권한 처리》 스프링 부트 프로젝트 중이다. jwt를 이용한 인증은 다 끝났고 인가 작업만 남았다. 대부분 스프링 서큐리티를 사용해서 권한 처리를 하는듯하다. 나는 일단 서큐리티를 사용하지 않고 짜고 있기 때문에 고민을 좀 많이 해봤다. 결론을 내리자면 인터셉터를 이용하기로 결심했다. 관리자인지 회원인지 인증이 필요한 작업이든지 중복되는 로직이 너무 많아지므로 이것은 인터셉터에서 컨트롤러로 넘어가기 전에 인가 작업을 해줘야 하는 것이 주된 이유다. 한번 해보자~ => 전반적인 계획 작성 중간 정리 혼자 프로젝트를 해서 인지 속도가 너무 나질 않는다. 생각을 해보았다. 어느 한 기능이든 유지보수가 용이하게 설계하기 때문이라는 생각이 들었다. 가장 시간을 많이 쏟은 부분은 Restful 한 설계 방식과 인증 인가 부분이다.. 2022. 5. 20.
2022.05.18 「Redis DB 적용」 스프링 부트 프로젝트를 하며 로그인 API까지는 jwt 토큰을 전달하는 방식으로 구현을 잘했다. 하지만 문제는 로그아웃이다. jwt 토큰 자체는 클라이언트에서 보관하기 때문에 서버가 자체적으로 삭제시킬 수 없다. 세션을 사용 시 서버가 세션 DB에 저장하고 있기 때문에 세션을 삭제하면 그만이지만 토큰은 그렇게 못 한다. 그래서 Redis DB라는 인메모리 DB를 이용해 보기로 했다. 처음 들어보는데 DB도 여러 가지 종류가 있는데 이 인메모리 DB는 다른 DBMS와 비교하여 어떤 성격을 가지는지 그걸 정리하고 적용해보는 하루를 보내게 될 것 같다. Redis DB Key & Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비 관계형 DBMS 캐시, DB 등으로 사용하며 인메모리.. 2022. 5. 18.
2022.05.16 「리팩토링」 프로젝트를 진행 중이다. 제대로 신경 써서 하다 보니 너무 오래 걸리는 것 같다. 또 제대로 짰다고 생각한 코드도 리팩터링 할 영역 투성이다. 이러면서 실력이 느는 거겠지..? 진짜 제대로 된 프로젝트 한번 만들어보자 리팩토링 목록 불변 객체 이슈 => setter를 허용한 객체 문제 : 불변성을 띄질 못한다. 해결 : loginDTO 객체는 값을 전달하는게 목적이므로 확실하게 불변성을 지녀야 한다. 따라서 불변객체로 다시 만들자 public class UserLoginDTO { private final String userId; private final String userPw; public UserLoginDTO(String userId, String userPw) { this.userId = use.. 2022. 5. 16.
2022.05.14 「JWT 인증」 인증을 구현하기 위해 기존에 사용하던 Session 로그인이 아닌 JWT를 이용하여 인증을 구현했다. 토큰을 처음 사용했다 보니 알아가는데 너무 오래 걸렸다. 무엇보다 나는 스프링 시큐리티를 사용하지 않고 서블릿 필터나 스프링 인터셉터를 이용해 토큰 유효성 검사를 하려고 했어서 더 쉽지 않았던 것 같다. 이번 프로젝트 인증에서 Session을 사용하지 않은 이유는 서버의 규모가 확장될 때의 인증 문제이기 때문인데 JWT를 이용한 인증도 여러 가지가 있기 때문에 나의 프로젝트에 맞는 단계가 어디인지에 상당히 헷갈렸던 한 주였다. 인증 작업을 하며 문제가 생겼던 부분이나 구현한 부분에 대해 정리를 해보겠다. Rest API를 설계할 때 인증은 session 기반이 아닌 토큰 기반으로 하는 것이 더 restf.. 2022. 5. 14.
2022.05.12 「ResponseEntity body & BuilderPattern & Join」 Restful 한 api를 설계하는 것은 참 까다로운 것 같다. 학원에서 완전 기초적인 내용만 배운 것도 있었고 그 부분만 머릿속에 깊이 저장되어 있었기 때문에 제대로 된 rest 방식은 다른 것임을 이해하는데 시간이 너무 오래 걸렸다. 회원 가입, 로그인만 하더라도 어떻게 보면 누군가에겐 별게 아닐테지만 어떤 식으로 생각을 하며 설계를 하느냐에 따라 시간이 오래 걸리는 것 같다. 어제 한 비밀번호 암호화도 마찬가지다. 특히 restful한 방식으로 설계를 하는 것은 처음 해보기 때문에 더 낯설고 이해가 잘 안 되었다. 보통 Return Type인 ResponseEntity를 사용해 응답 관련 정보를 돌려주는데 헤더와 바디에 적절한 데이터를 넣어주는 걸 고르는 게 쉽지 않았다. 오늘도 아침부터 지금 오후.. 2022. 5. 12.
2022.05.11 「SHA-256 + Salt & 인증」 인증 관련해서 사실 스프링 시큐리티를 사용해도 괜찮지만 순차적으로 가기 위해서 순수하게 SHA-256 암호화 알고리즘을 이용해 비밀번호 암호화와 로그인을 원시적으로 구현한 하루다.. 거진 12시간을 삽질한 것 같다. 암호화 알고리즘 이용과, Mybatis 매핑 문제도 있고, ModelMapper를 사용해 DTO VO 매핑이 계속 안되어서 하루 종일 멘털이 나갔었다. 다른 공부도 할게 너무 많은데 프로젝트만 비중이 많았던 하루라 너무 아쉽다. 하지만 삽질한 만큼 내 것이 되었으면 좋겠다. 오늘은 하루종일 삽질한 내용을 기반으로 한번 정리를 해보려고 한다. 여담으로 다이어트중인데 요새 상주하는 공부 환경에서 오트밀 미니 바이트를 제공해주는데 이거 진짜 너무 맛있다.. 예전엔 진짜 단 거 잘 참았는데 늙었나 .. 2022. 5. 11.
2022.05.10 「Rest Ful Api & DTO,VO mapping & Mysql Index & 상수화」 프로젝트를 진행 중에 수정사항이 너무도 많다는 것을 알게 되었다. 예전에 학원에서 프로젝트를 할 때는 어떻게 만들든 기한이 정해져 있었기 때문에 완성도가 우선이었고, 유지보수에 대한 프로그래밍에 신경을 쓰지 않았었다. 하지만 실제로 제대로 된 프로그래밍을 하다 보니 예전 버릇이 나오게 되었고, 이번 리뷰를 받은 김에 리팩터링을 빠르게 하며 정리를 해볼 생각이다. RestFul Api 의 return 값 1. 되도록 체이닝 하는 방식을 사용 2. response에 해당되는 헤더 메시지(상태 코드, 메시지 등등), 바디 값을 다 넣도록 노력하자 DTO, VO 간의 매핑 현재 Mybatis를 사용중이므로 테이블 자체의 Entity는 VO service mapper 계층 이동 시 VO를 이용해야 함 .. 2022. 5. 10.
2022.05.06 「Git Flow 이슈」 스프링 프로젝트를 진행중이다. 단순히 Master 브랜치만 이용하는 것이 아닌 코드 리뷰를 받기 위해 Pull Request를 올려야하기 때문에 여러 개의 브랜치를 나누어 작업하는 도중 문제가 발생했다. pr을 올리기 위한 브랜치간의 분업이 적절히 이루어져야 하는데 혼자 하다 보니 이것 저것을 건들어서 다양하게 건든 것이다. 그래서 알맞은 해결방안을 모색해보고자 한다. 인텔리제이 Branch 체크아웃 하는 방법 혹여나 잘못 git push를 했다면 2022. 5. 6.
2022.05.03 「주석을 작성하는 방법 & Back 중심 개발 수정 및 시작」 스프링 부트 프로젝트를 시작한 지 일주일이 좀 되어간다. 잘 되어가고 있나 생각을 해보았다. 하지만 아무리 생각해도 이상하다는 생각이 계속 들었다. 1. 분명 Backend 개발이 목적인데 왜 나는 Front(Thymeleaf, CSS 등등)에 시간을 더 쏟고 있는 것인가? 2. 주석 처리 방법이 난잡하다? 이를 고민하다가 결국 개발자분의 조언을 듣고 클래스와 메서드 단위의 주석을 작성하는 방법, Back 중심 개발을 시작하기로 생각했다. 주석을 다는 방법? 기존에 나는 기준 없이 다른 사람이 이 정도면 알아보겠지라는 생각으로 나름 주석을 잘 작성했다고 생각했다. 그건 나만의 착각이었다. 아무리 잘 작성했다 생각한 주석도 남이 볼 땐 그저 난잡하고 의미 없이 달린 주석일 수 있다는 생각을 하지 못했던 것.. 2022. 5. 3.
2022.05.01 「View 만들기, Insert, Select 작업」 ▶ 주간 정리 1. 항상 구상했던 계획보다 늦어진다는 점 (주관적인 평가로 성과가 기대보다 떨어진다)? > 욕심이 많은 건가 생각이 든다. > 다른 생각을 하지 말고 집중할 수 있을 때 더 해보는 것으로! 2. mysql을 공부하며 어려웠던 점 > 책만 보는 것이 아닌 예제를 검색해보거나 직접 쿼리를 작성하면서 함 > 읽는 거보다 확실히 경험하는 게 머리에 잘 남는다. 3. 쉬고 싶은 욕구 > 솔직히 7일 내내 하루종일 실내에 박혀 모니터만 바라보고 있는 것이란 쉽지 않다.. (핑계다) > 적절한 때에 좀 쉬는 것으로 (잠 더 자기, 2시간 정도 친구와 밥 약속이라던지 등) 4. 프론트 관련 > 난 정말 front와 안 맞는다고 생각한다. 태그들을 보기만 해도 울렁거린다. > 그래도 해야 하니 이번 프로.. 2022. 5. 1.
2022.04.30 「logback, lombok, mysql」 ▶ 파트 1 (12시 ~ 2시 반?) 1. 페이징 로직 2. 더미 이미지 구하기 3. mysql 시퀀스 관련 찾기 4. logback (jdbc도) 설정 ▶ 파트 2 (3시 반 ~ 12시) 1. 알고리즘 1문제 두 개 뽑아서 더하기 2. 추후 계획 수립 예정 ▶ Logback 설정 - Spring boot에서는 log4j 말고 logback을 사용한다. - spring boot web starter 의존성에 자동으로 logback이 추가되어 있다. - 기본 설정을 하려면 gradle이나 xml로 설정 가능하다. - log 파일들을 저장하려면 설정 xml파일에 경로 지정 - properties 파일에 xml 경로 지정 - jdbc log를 남기고 싶다면 추가로 설정 - spring에서와 마찬가지로 spy를.. 2022. 4. 30.
2022.04.29 「부트스트랩 관련」 ▶파트 1 (10시 ~ 2시) 1. mysql Ch.10 실행 계획 (2. 부트스트랩 관련 문의) => 되면 3. 프로젝트 html 정리 ▶파트 2 (3시 ~ 6시) 1. 부트스트랩 폴더 추가(느려지니 나중에 하자) 2. 자소서 수정 3. Controller 정의 ▶프로젝트 관련 1. 페이징 처리 시 DB 요청 => mysql 이므로 oracle의 rownum을 사용하지 못 한다. 하지만 비슷하게 따라할 수는 있다. 그래도 mysql을 배웠기 때문에 차별화된 방식을 사용할 것. => 방식은 여러 가지이지만 limit 함수를 사용한다. (검색 속도가 빠름) 2022. 4. 29.
2022.04.28 「Thymeleaf 설정」 ▶ 파트 1 (10시30분 ~ 5시30분) 1. 로지텍 마우스 구매 2. 알고리즘 정렬 Level2 3. mysql CH.9 4. 위키 수정 5. 스프링부트 프로젝트 진행 ▶ 파트 2 (9시30분 ~ 12시) 1. 스프링부트 프로젝트 진행 => 알바 갔다 와서 경로 좀 손 보고 html도 좀 넣고 하자 ▶ 문제 1. view 디자인 문제 문제점: Thymeleaf 엔진을 사용하는데 여기는 jsp에서 사용하는 tiles를 사용하지 못한다. 해결 : - Thymeleaf가 제공하는 layout 라이브러리를 사용해서 적용 가능하다. - Thymeleaf 관련 resolver properties 파일 정의함 2. resources 폴더 아키텍쳐 관련 문제점 : 스프링부트에서 view 관련 아키텍쳐 설계가 처음이.. 2022. 4. 28.
04.27 개인 프로젝트 시작 [닭가슴살 구매 사이트] [DB 구상] Spring boot를 이용하여 개인 프로젝트를 진행하기로 했다. 기존 진행했던 프로젝트 : https://sweeeetgoguma.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EB%84%90-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%8A%B8%EB%A0%88%EC%9D%B4%EB%84%88-%EB%A7%A4%EC%B9%AD-%EC%82%AC%EC%9D%B4%ED%8A%B8 [회고] 파이널 프로젝트 (트레이너 중계 플랫폼) ▶ 파이널 프로젝트 끝! (2022.3.23 ~ 2022.4.13) 드디어 파이널 프로젝트가 끝이 났다! 회의 시작일이 벌써 엊그제 같은데.. 눈 내리는 첫 회의일에 시작을 해서 끝나고 보니 벚꽃이 떨어질 때이다. 중 sweeeet.. 2022. 4. 27.
반응형