Search

(팀장)임지훈 계획

Chapter
수요일(1주차)
Driver
가장 중요한 건 계속 질문에만 머물러 있기 보다는 자신이 할 수 있는 일을 일단 시작하고 거기서부터 꾸준히 자신을 한계로 밀어붙이는 것입니다. 무엇이든 해 보아야 방향이 보이는 법입니다. '어디가 좋은 길일까?'라는 질문에 너무 오래 사로 잡혀있는 건 좋지 않습니다. 오늘 바로 Armeria나 Central Dogma에 보낼 PR을 준비해 보시면 어떨까요? :)

오늘의 목표

카카오 로그인 딥다이브
AOP 딥다이브

목표에 따른 To-Do

일일 코테 두 문제
일일 코테 스터디
카카오 로그인
RestTemplate을 사용하여 어떻게 POST를 보내는가
인증 시, 어떤 시퀀스로 어떤 값을 요청하여 어떻게 핸들링하는가?
AOP
왜 쓰는가?
무슨 개념인가??
호따뚜따 실제 코딩 고고고!! >>>> 개념&방법론 공부
이전 프로젝트 진행하며 쌓아왔던 궁금했던 것들 질문하기
1.
토끼책 질문
a.
한 사람이 동시에 여러 역할을 수행할 수 있다 : 캐시어와 바리스타라는 개별적인 역할을 이용해 협력 관계를 묘사했지만 한 사람이 캐시어와 바리스타의 역할을 동시에 수행하는 것도 가능하다.
https://incheol-jung.gitbook.io/docs/study/readme-1/1
2.
양방향 연관관계 편의메서드를 요구사항에 다른 요청에 따라 한 쪽 도메인에서 update,remove를 정의해주었다. 이렇게 하는 게 맞나??
@Entity public class Post extends TimeStamp { @ManyToOne(fetch = FetchType.LAZY) @Setter(AccessLevel.NONE) @JoinColumn(name = "user_id") User user; }
Java
복사
@Entity @NoArgsConstructor public class User extends TimeStamp { @OneToMany(targetEntity = Post.class, mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) private final List<Post> posts = new ArrayList<>(); }
Java
복사
/** * Post와 1대다 관계의 User를 입력받아 연관관계 해결 * * @param user 로그인 된 User */ public void setAuthor(User user) { // 기존 연관된 User 제거 if (this.user != null) { this.user.getPosts().remove(this); } // User 추가 후, User에서의 posts에 본인 추가 this.user = user; user.getPosts().add(this); }
Java
복사
3.
Test 코드 시, yml 은 어떻게 보호하나??
a.
@ActiveProfiles("test")로 변경해주고 있긴 한데, 혹시 환경변수 설정은 못 하나요??
application-test.yml을 따로 나눠서 분리!!
⇒ 공부공부고웁!!
spring: profiles: default: local # DATABASE datasource: url: ${DB_URL} driverClassName: com.mysql.cj.jdbc.Driver username: ${DB_USER} password: ${DB_PASSWORD} # JPA jpa: properties: hibernate: # INIT ddl-auto: create-drop # DEV # ddl-auto: update # Only 'create' when init show_sql: true show-sql: true database-platform: org.hibernate.dialect.MySQL8Dialect generate-ddl: true # JWT jwt: secret: key: ${JWT_KEY} --- spring: config: activate: on-profile: test # DATABASE datasource: url: jdbc:mysql://localhost:3306/hobby_bungae?serverTimezone=UTC&characterEncoding=UTF-8 driverClassName: com.mysql.cj.jdbc.Driver username: root password: 1026baby # JPA jpa: properties: hibernate: # INIT ddl-auto: create-drop # DEV # ddl-auto: update # Only 'create' when init show_sql: true show-sql: true database-platform: org.hibernate.dialect.MySQL8Dialect generate-ddl: true # JWT #jwt: # secret: # key: # 7Iqk7YyM66W07YOA7L2U65Sp7YG065+9U3ByaW5n6rCV7J2Y7Yqc7YSw7LWc7JuQ67mI7J6F64uI64ukLg==
Java
복사
4.
단방향 연관관계에서는 역참조를 할 수가 없다. 그럼 어떻게 상대방 엔티티를 찾아오는가??
remove(User user){ List<Post> posts = postRepo.findByUser(user); posts.forEach(postRepo.remove(this)); userRepo.remove(user); }
Java
복사
역참조가 아닌, 직접 User와 관련된 게시글 찾아 삭제
단방향 역참조 지원 X ,,, 그럼 이렇게 해야함,,,?
양방향 쵝오,,,?
5.
다른 도메인에 대한 검증 :: 서비스 주입 vs 레포지토리 주입
One 레포지토리 ⇒ One 서비스 ONLY
: 나중에 안 복잡해진다!!!
a.
서비스 주입
i.
컨트롤러 단에서 다른 도메인의 서비스를 주입받고,
ii.
타 도메인 서비스 내에서 검증을 처리,
iii.
검증 실패 시 예외처리
b.
레포지토리 주입
i.
서비스 단에서 다른 도메인의 레포지토리를 주입받고
ii.
타 도메인 레포지토리를 활용한 검증 실행
iii.
검증 실패 시 예외처리
서비스 주입하여 처리하는 게 맞다고 팀원들간 의견수렴함
a.
컨트롤러 단에서 다른 서비스를 통한 검증 이후 본인 서비스 실행 여부 판별
b.
특정 레포지토리에 접근하는 서비스는 같은 도메인의 서비스만 두는 게 더 좋다는 생각
이코테 알고리즘 스터디 준비
이진탐색 이론준비
이진탐색 문제풀기
1.
이코테 >> 떡볶이 떡 만들기
2.
프로그래머스 >> 징검다리