일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 머신러닝
- 쇼핑몰홈페이지제작
- 혼공머신
- ChatGPT
- 개발일기
- 정보처리기사필기
- 상속
- 자바
- SQL
- 순환신경망
- 자바스크립트심화
- 스프링프레임워크
- 파이썬
- JDBC
- 컴퓨터비전
- 자바스크립트
- 타입스크립트심화
- 데이터분석
- 자바 실습
- 깃
- 데이터베이스
- rnn
- 정보처리기사실기
- 디버깅
- 딥러닝
- 스프링
- 연습문제
- JSP
- JSP/Servlet
- html/css
- Today
- Total
"게임 개발자"를 향한 매일의 공부일지 _ 1기
Spring Ⅰ - 실력 확인 테스트 문제 풀기 1 : 이론 문제 본문
저녁을 먹고 방 청소를 하느라 시간이 좀 지체되었다. 내일은 연말이니 새로운 다짐을 하기로 했다. 그동안 20년 동안 내가 끊지 못하며 좋아했던 인스턴트 음식을 완전히 끊고 너무나도 좋아했던 방송과 드라마를 끊기로 한 것이다. 영화까지는 끊을 건 없을 것 같아 만약 내가 일주일 동안 다짐을 잘 지킨다면 일주일에 하루 정도는 시청할 수 있을 것 같다.
하지만 이제는 더 이상 함께 공존할 수 없다는 걸 깨달았다. 진작 깨달았지만 올해는 조금씩 멀리하며 절제하는 방향으로 훈련했고 내년에는 이것들을 완전히 멀리하기로 했다. 이 두 가지만 잘 지킨다면 난 굉장히 많은 것들을 얻게 될 거라 확신한다.
이제 테스트 문제를 풀며 SpringⅠ 과목을 마무리하겠다.
테스트 문제 풀기
문제 1번
스프링 프레임워크에서 관점 지향 프로그래밍(AOP)은 제어 역전(IoC) 및 의존성 주입(DI)과 관련이 있다. 따라서 정답은 4번이다.
- 관점 지향 프로그래밍(AOP)의 역할
- AOP는 애플리케이션의 핵심 로직과 부가적인 관심사를 분리하는 프로그래밍 패러다임이다. 이를 통해 로깅, 트랜잭션 관리, 보안 같은 부가 기능을 핵심 비즈니스 로직과 분리할 수 있다.
- AOP의 구현은 스프링 컨테이너에 의해 관리되므로, 제어 역전(IoC)과 의존성 주입(DI)의 개념과 밀접하게 연결된다.
- AOP와 IoC, DI의 관계
- AOP를 구현하려면 프록시 객체를 생성해야 하는데, 이 프록시 객체의 생명주기는 스프링 컨테이너가 관리한다.
- AOP를 통해 의존성 주입된 객체의 특정 메서드에 부가적인 관심사(예: 로깅, 트랜잭션)를 적용할 수 있다.
문제 2번
"Spring MVC에서 클라이언트의 요청을 받아 처리하는 부분은 View Resolver이다"는 틀린 설명이다.
View Resolver는 Spring MVC에서 클라이언트 요청을 처리하는 역할을 하지 않는다.
- View Resolver의 역할
- 컨트롤러(Controller)가 반환한 View 이름을 바탕으로 적절한 View 객체(HTML, JSP 등)를 찾아주는 역할을 한다.
- 즉, 클라이언트 요청을 직접 처리하지 않고, 응답에 필요한 뷰를 찾아주는 "후처리" 단계에서 사용됨
- 클라이언트 요청을 처리하는 역할은 DispatcherServlet과 Controller가 담당한다
- DispatcherServlet이 요청을 받아서 적절한 Handler(Controller)로 요청을 전달
- Controller는 클라이언트 요청을 처리하고, 모델 데이터를 생성하거나 필요한 비즈니스 로직을 실행한 뒤, 뷰 이름을 반환
문제 3번
"JdbcTemplate를 사용하더라도 SQL은 직접 작성해야 한다"는 틀린 설명이다.
JdbcTemplate는 순수한 JDBC API의 반복적인 작업(예: 커넥션 관리, 리소스 해제 등)을 간소화하고, 효율적으로 SQL을 실행할 수 있도록 도와주는 클래스이다. 하지만 JdbcTemplate를 사용한다고 해서 SQL을 반드시 직접 작성해야 하는 것은 아니다.
JdbcTemplate는 직접 SQL을 작성하는 방식도 지원하지만, 필요에 따라 PreparedStatement, CallableStatement, 또는 ORM과 같은 다른 방식을 활용할 수 있다. 따라서, "직접 작성해야 한다"는 말은 틀린 설명이다.
JdbcTemplate 사용 예시
직접 SQL 작성
JdbcTemplate를 사용해서 SQL을 직접 작성하는 예
String sql = "SELECT * FROM users WHERE id = ?";
User user = jdbcTemplate.queryForObject(sql, new Object[]{1}, new BeanPropertyRowMapper<>(User.class));
PreparedStatement 사용
SQL을 직접 작성하지 않고 PreparedStatement를 사용하는 예
String sql = "SELECT * FROM users WHERE id = ?";
User user = jdbcTemplate.execute(sql, (PreparedStatementCallback<User>) ps -> {
ps.setInt(1, 1);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
User u = new User();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
return u;
}
return null;
});
정리
JdbcTemplate를 사용하면 SQL을 직접 작성하는 방식도 가능하지만, 항상 직접 작성해야만 하는 것은 아니다.
문제 4번
"엔티티 매니저(EntityManager)는 서비스에서 하나만 생성된다"는 설명이 틀린 내용이다. 이 문제는 조금 헤깔렸다. 헷갈린 부분인 3번과 4번 답지에 대해서 자세히 살펴보기로 하자.
JPA의 엔티티 객체 생성과 데이터베이스 저장은 별개
- 엔티티 객체를 생성하는 것은 단순히 메모리 상에서 객체를 생성하는 작업일 뿐이다.
- 데이터베이스에 저장하려면 EntityManager의 persist() 메서드를 호출하거나, 스프링 JPA에서는 save() 메서드를 호출해야 실제 데이터베이스에 저장된다.
// 엔티티 객체 생성
User user = new User();
user.setName("John");
// 데이터베이스에 저장
entityManager.persist(user); // 또는 JPA Repository의 save() 메서드 호출
- 객체를 생성했다고 해서 자동으로 데이터베이스에 반영되는 것은 아니다. 데이터베이스와의 동기화는 JPA가 관리하는 영속성 컨텍스트(Persistence Context)에서 이루어져야 함
3번 답에 대한 설명
- 엔티티 매니저(EntityManager)
- 엔티티 매니저는 JPA에서 데이터베이스 작업(조회, 저장, 업데이트, 삭제 등)을 수행하는 주요 객체이다.
- 하지만 엔티티 매니저는 하나만 생성되는 것이 아니다. 엔티티 매니저는 트랜잭션마다 새로 생성되며, 멀티스레드 환경에서 공유되지 않아야 한다.
- 스프링 환경에서의 엔티티 매니저
- 스프링에서는 일반적으로 엔티티 매니저 팩토리(EntityManagerFactory)를 통해 트랜잭션 단위로 새로운 엔티티 매니저를 생성한다.
- 각 트랜잭션마다 독립적인 엔티티 매니저가 생성되고, 트랜잭션이 끝나면 해당 엔티티 매니저는 닫힌다.
- 따라서, 서비스 계층에서 하나만 생성된다는 설명은 틀린 말이다.
학습을 마치고
테스트 문제 4번까지 풀었는데 아직 3문제가 남아있다. 나머지 문제는 실습 문제라 코드가 무척 길기에 다음 포스트에 따로 정리하며 풀어보기로 했다.
이론 문제는 거의 다 맞은 것 같다.
'웹 개발 > Spring' 카테고리의 다른 글
Spring Data JPA 1 - 강의 소개 및 페이징과 정렬 처리 (0) | 2024.12.31 |
---|---|
Spring Ⅰ - 실력 확인 테스트 문제 풀기 2 : 실습 문제 (0) | 2024.12.30 |
Spring JPA 7 - Repository 설계하기 2 : 실습 문제 풀기 (0) | 2024.12.30 |
Spring JPA 6 - Repository 설계하기 1 : 이론 학습 및 퀴즈 문제 풀기 (0) | 2024.12.30 |
Spring JPA 5 - Entity 설계하기 (0) | 2024.12.30 |