Skip to content

[24기_정홍준] spring tutorial 미션 제출합니다. - #1

Open
chjpooh2002 wants to merge 6 commits into
CEOS-Developers:chjpooh2002from
chjpooh2002:chjpooh2002
Open

[24기_정홍준] spring tutorial 미션 제출합니다.#1
chjpooh2002 wants to merge 6 commits into
CEOS-Developers:chjpooh2002from
chjpooh2002:chjpooh2002

Conversation

@chjpooh2002

Copy link
Copy Markdown

No description provided.

@gilbert09031 gilbert09031 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1주차 과제 수고하셨습니다 !

예시 코드부터 선택과제까지 모두 꼼꼼히 작성해주셔서 읽어보면서 다시 복습할 수 있었던 것 같아요
특히 설계해가시면서 판단한 기준까지 남겨주신게 좋았던 것 같아요 !

앞으로도 화이팅 😄

import jakarta.persistence.Id;
import lombok.Data;

@Data

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

참고 아티클

@Data는 반복 코드를 줄여준다는 장점이 있지만, 내부적으로 여러 Lombok 어노테이션을 포함하고 있다는 것을 알고 계신가요~?

@Data가 대신 생성해주는 메서드가 어떤 문제를 만들 수 있을지 알아보면 좋을 것 같아요~

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

첨부해주신 자료 참고하여 @Data가 어떠한 문제점을 발생시킬 수 있는지 알아보겠습니다! 리뷰 남겨주셔서 감사합니다!

@taiho0303-blip taiho0303-blip left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

잘 정리해주셔서 읽으면서 한번 더 공부가 됐습니다!

Comment thread README.md
└─→ View ──→ 응답(HTML)
```
관심사를 분리하였습니다. 화면을 바꾸면 View만, 로직을 바꾸면 Controller와 그 아래만 건드립니다.<br>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MVC에서 화면 생성 로직을 View로 분리하는 부분을 보면서 실제 스프링 MVC에서는 view를 어떤 방식으로 만드는지도 같이 알아보면 좋을 것 같아요! JSP나 Thymeleaf 같은 템플릿 엔진과 Model, ViewResolver가 어떻게 연결되는지까지 찾아보면 좋을 것 같아요!

Comment thread README.md
-> CEOS Spring tutorial 과제를 진행하면서 api 호출을 할 때 엔드포인트가 /tests인 것을 /test로 잘못 쳐
Whitelabel이 떴던 게 생각났고 그 원리에 대해 이번 기회로 알 수 있게 된 거 같습니다.

### 어댑터는 왜 필요한가?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 HandlerAdapter가 DispatcherServlet 흐름에 존재한다는 것만 알고 있었는데 왜 필요한지까지 찾아보신 부분이 좋았습니다! 컨트롤러마다 호출 방식이 다르기 때문에 어댑터가 필요하다는 점을 이해하는데 도움이 됐어요!

@rinarina0429 rinarina0429 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

전체적으로 예시도 직관적이고, 설명이 너무 이해가 잘되고, 동시에 깊은 내용도 많아 도움이 많이 되었습니다. 한번 더 읽어봐야겠어요... 다음에 리뷰 차례 아니어도 구경 오겠습니다.. 수고하셨습니다!

Comment thread README.md
Comment on lines +176 to +195
### 프록시 때문에 생기는 함정
```java
@Service
public class TestService {

public void outer() {
inner(); // ← 여기가 문제
}

@Transactional
public void inner() {
...
}
}
```
`outer()`를 호출하면 `inner()`의 `@Transactional`이 동작하지 않습니다. 컨트롤러가 `outer()`를 부르면 프록시를 거칩니다. 하지만
`outer()` 안에서 `inner()`를 부르는 건 `this.inner()`입니다. 이미 진짜 객체 안에 들어와 있으니 프록시를 다시 지나가지 않습니다.

이걸 **자기 호출(self-invocation)문제**라고 하고, 실무에서 자주 발생합니다. 트랜잭션이 왜 안 걸리지 하고 한참 헤매게 되는 원인 1순위라고 볼 수 있습니다.
해결책은 클래스를 분리하거나, 자기 자신을 주입받거나(`@Lazy` 필요), `AopContext`를 쓰는 방법이 있는데 보통은 클래스를 나누는 것이 정석입니다.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

실무에서까지👍👍 고수같으십니다. AOP의 프록시 동작 방식뿐만 아니라 self-invocation 문제까지 정리해주셔서 이해하기 좋았습니다! 배워갑니다

Comment thread README.md
이걸 **자기 호출(self-invocation)문제**라고 하고, 실무에서 자주 발생합니다. 트랜잭션이 왜 안 걸리지 하고 한참 헤매게 되는 원인 1순위라고 볼 수 있습니다.
해결책은 클래스를 분리하거나, 자기 자신을 주입받거나(`@Lazy` 필요), `AopContext`를 쓰는 방법이 있는데 보통은 클래스를 나누는 것이 정석입니다.
## 3. PSA
PSA는 Portable service Abstraction의 약자로 세 가지 중 제일 추상적이라 감이 잘 안 오는 개념입니다.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

어떻게 아셨나요ㄷㄷ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants