본문 바로가기
템플릿 메서드 패턴 현재 코드의 문제 : 같은 로직(validateUser)가 모든 crud 메서드에 중복 구현되어있다.위: 로그인 사용자용 createPost 메서드아래: 비로그인 사용자용 create, updatePost 메서드 user검증로직이 중복되며, 캡슐화 하는것이 좋다. 해당문제를 해결하기 위한 "템플릿 메서드 패턴" 을 적용시켜 보았다.https://refactoring.guru/ko/design-patterns/template-method 템플릿 메서드 패턴/ 디자인 패턴들 / 행동 패턴 템플릿 메서드 패턴 다음 이름으로도 불립니다: Template Method 의도 템플릿 메서드는 부모 클래스에서 알고리즘의 골격을 정의하지만, 해당 알고리즘의 구조를 변경하refactoring.guru요즘 자기 전에 보는 .. 2024. 12. 15.
DDD(Domain-Driven Design) DDD란? 소프트웨어의 복잡성을 줄이고, 도메인 로직을 중심으로 개발을 진행하기 위해 계층화된 파일 구조다. 대표적으로 domain - 애플리케이션의 핵심 비즈니스 로직application(애플리케이션 계층) - 유스케이스 구현, 도메인 계층 호출infrastructure(기술적 계층) - db, 메시징 시스템, 외부api, 파일 시스템 등 외부 기술과의 통합을 담당interfaces - 사용자와 상호작용하는 인터페이스. rest api, 웹 페이지, cli 로 이루어져있다. DDD는 SRP를 완벽히 따르며, 도메인 모델을 가장 중요하게 여긴다.도메인 로직은 domain 계층에 집중해야 하며, 다른 계층에 의존하지 않는다.계층 간의 의존성 흐름은 interfaces -> application -> dom.. 2024. 12. 13.
java persistence api 도전과제 도전기 도전과제 다했다.커밋을 좀 꼼꼼히 (?) 해보려고 했더니 41개나 되었다. readme는 당일날 천천히 추가해야겠다.https://github.com/roqkfchqh/Calendar GitHub - roqkfchqh/CalendarContribute to roqkfchqh/Calendar development by creating an account on GitHub.github.compersistence스러운 기능들을 써봤다.고집과 지속성에는 어떤 관계가 있을까? 고집이 세서 상태가 지속된다 보면 되려나  1. 영속성 컨텍스트(Persistence Context) 영속성 컨텍스트는 jpa의 핵심 개념으로, 엔티티를 관리하고 db와의 상태를 동기화하는 역할을 한다. 쉽게 말해서 jpa가 엔티티를 관리하.. 2024. 12. 12.
트러블슈팅 : 필수과제 1. user table이 자동 생성되지않는 오류user create 테스트 도중, user table이 자동으로 생성되지 않는 오류를 발견했다. 'user' 이라는 테이블 이름은 예약어라서 users로 변경해주니 정상적으로 반영됐다.@Table(name = "users")   2. session 사용 시 dto와 entity 간 오류ClassCastException이 발생했다. dto 객체를 entity 객체로 캐스팅하려 시도하면서 발생하였다.HttpSession에 dto를 저장한 후, 이를 다시 사용할 때 entity와 dto를 무차별 혼용하면서 생긴 에러다. 따라서 session관련 데이터들은 모두 entity로 처리하도록 했다. dto는 클라이언트와의 request - response를 위한 것으.. 2024. 12. 11.
도전과제 과정 도전과제를 마무리했다. 이번에는 3개의 브랜치로 나눠서 작업을 했다. 근데 마지막에 challenge에서 main브랜치로 옮길 때 커밋내역을 안 지워서 커밋이 32개인 상태로 main에 올라가게 되었다.필수과제만 올릴 땐 잘 올렸는데 실수했다 .. https://github.com/roqkfchqh/Scheduler/tree/main GitHub - roqkfchqh/SchedulerContribute to roqkfchqh/Scheduler development by creating an account on GitHub.github.com여튼 리드미도 완성하고 제출까지 완...ㄹ...를 하려 하는데 난 왜 이런걸 맨 마지막에 발견하니 항상.. 한두번이 아니다 ㅠㅠ 글을 왜이렇게 못읽지그리 어려운 작업은.. 2024. 12. 9.
(도전과제 시작) author 테이블 만들기, custom exception 추가 레벨 3이다. 테이블이 하나가 추가가 되고, FK를 적절히 사용해야 한다.처음에 만들어둔 erd대로 db를 수정하고 시작하면 된다.우선 author 테이블을 추가해주고,ide에서 외래 키도 추가해준다.짠 그리고, author 클래스 작업에 앞서서 일단 예외처리를 먼저 빨리 설정해주고싶었다.예외처리를 그동안 badinputexception("오류요")로 대충 퉁쳤다. "오류요"가 더 늘어나면 이제부터 수정할 때 힘들어질 게 뻔하니까 예외클래스 먼저 만들어놓고 시작하자.@Getterpublic class CustomException extends RuntimeException { private final ErrorCode errorCode; public CustomException(ErrorCod.. 2024. 12. 5.
트러블슈팅 : 필수과제 버그 수정 몰랐는데 jdbc는 jpa처럼 entity를 자동생성해주지 않아서 테이블을 미리 만들어놓고 시작해야되더라..자꾸 swagger에서 500 서버연결 오류가 나서 코드도 고쳐보고 했는데 안되길래 찾아보니.. 일단 이게 문제인 듯 했다.뭐 그 덕에 코드 구조도 싹다 고쳤다. response 단에도 dto만들어주고, controller에서도 ResponseEntity로 값을 반환하도록 고쳤다.combinedDto를 만들어서 password와 name,content를 같이 받는 경우 / password만 따로 받는 경우를 분리했다.또한 responseEntity를 사용해 올바른 http코드로 값을 반환하도록 했다. delete의 경우 nocontent()로 204코드를 반환한다.아무튼 좀 더 restful한 ap.. 2024. 12. 5.
Lv1, Lv2 api 프로젝트때 썼던거 복붙해서 날먹하려고 했는데 jpa가 아니라 jdbc로 해야해서 처음부터 만들어야한다.(..)일단 entity와 @id, @generatedvalue를 못 쓴다.repository 또한 jdbc에서는 Dao가 그 역할을 하고, 직접 쿼리문을 작성해줘야 한다.@Getter@Setter@ToString@AllArgsConstructor@EqualsAndHashCode(of = "id") //id필드를 비교대상으로 둠.(고유성을 id로 판단, PK라는뜻)public class Schedule { public Schedule(){ this.id = UUID.randomUUID(); this.created = LocalDateTime.now(); .. 2024. 12. 4.
일정 관리 앱 프로젝트 시작 우선 기본세팅들, postgresql db 만들고, 포트와 환경변수 등등 세팅을 다 하고 dev브랜치 만들어서 푸시부터 하고 시작한다.ㅇㅅㅇ자 이제 그럼 어떻게 만들거냐 고민을 좀 해보자면일단 ERD부터 대강 작성하고 시작해야 될 것 같다.API는 일정 생성, 수정, 삭제, 불러오기(페이징)을 중심으로 차차 늘려나가서 프로그램이 완성되면 명세서를 작성하면 될 것 같고..테이블은 일정, 작성자 이렇게 두개로 나눠서 작성자의 PK가 일정의 FK가 되도록 하면 될 듯 하다.여기서 최근에 api 프로젝트에서 적용해본 ip를 unique key로 도입해봐야겠다.일단 이정도로.. ip와 email을 unique로 만들어서 ip가 바뀔 시 인증과정을 만들어봐야겠다. 2024. 12. 4.
Spring security + Custom exception + Redis + ... 흠~ 거의 다 완성했다. 원래 바로 docker로 aws에 올려서 배포 테스트 해볼랬는데 OAuth 쪽도 관심이 생겨서 기능 확장을 생각중이다.패키지 또한 엄청 길어졌다. 그리고 뭔가를 또 겁나 많이 추가했다. 하나씩 살펴보자  1. Spring security@Configuration@AllArgsConstructorpublic class SecurityConfig { private final CustomAccessDeniedHandler accessDeniedHandler; private final CustomAuthenticationEntryPoint authenticationEntryPoint; //유저권한 접근페이지 설정 @Bean public SecurityFilte.. 2024. 12. 2.