개발/스프링(8)
-
AOP
AOP가 필요한 상황 모든 메소드의 호출 시간을 측정하고 싶다면? 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면?문제회원가입, 회원 조회에 시간을 측정하는 기능은 핵심 관심 사항이 아니다. 시간을 측정하는 로직은 공통 관심 사항이다. 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다. 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다. 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다.AOP 적용 AOP: Aspect Oriented Programming 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core..
2025.09.28 -
스프링 DB 접근 기술
H2 데이터베이스 설치실무에서는 Mysql, Oracle을 쓰지만, 이번시간에는 20년전에 개발했던 DB를 사용해보자. 테이블 생성하기테이블 관리를 위해 프로젝트 루트에 `sql/ddl.sql` 파일을 생성순수 Jdbc환경 설정build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리 추가DataSource는 데이터베이스 커넥션을 획득할 때 사용하는 객체다. 스프링 부트는 데이터베이스 커넥션 정보를 바탕으로 DataSource를 생성하고 스프링 빈으로 만들어둔다. 그래서 DI를 받을 수 있다.구현 클래스 추가 이미지스프링 설정 이미지개방-폐쇄 원칙(OCP, Open-Closed Principle)확장에는 열려있고, 수정, 변경에는 닫혀있다.스프링의 DI (Dependencies Injec..
2025.09.24 -
GET, POST 메서드
1. GET과 POST 기본 개념✅ GET목적: 서버에서 데이터를 조회(Read) 할 때 사용.특징URL에 쿼리스트링(Query String) (?key=value)으로 데이터 전달.요청 데이터가 주소창에 노출됨.브라우저 캐싱·북마크 가능.길이 제한 있음(브라우저·서버마다 다르지만 보통 2,000자 이내).서버 상태를 바꾸지 않는 요청에 사용 (idempotent: 같은 요청을 여러 번 해도 결과 같음).✅ POST목적: 서버에 데이터를 등록(Create)하거나 수정(Update) 할 때 사용.특징데이터가 HTTP Body에 담겨 전달됨.URL에 보이지 않음 → 보안상 더 안전.데이터 크기 제한 거의 없음.서버 상태를 바꾸는 요청에 사용 (ex. 회원가입, 글쓰기).같은 요청을 여러 번 보내면 결과가 달..
2025.09.22 -
회원 관리 예제 - 웹 MVC 개발
회원 웹 기능 - 홈 화면 추가홈 컨트롤러 추가회원 관리용 홈참고: 컨트롤러가 정적 파일보다 우선순위가 높다.회원 웹 기능 - 등록회원 등록 폼 개발 회원 등록 폼 컨트롤러회원 등록 폼 HTML ( `resources/templates/members/createMemberForm` )회원 등록 컨트롤러웹 등록 화면에서 데이터를 전달 받을 폼 객체@Getmapping, @Postmapping회원 웹 기능 - 조회 회원 컨트롤러에서 조회 기능회원 리스트 HTML퀴즈요청 처리 시 스프링 MVC는 컨트롤러 매핑과 정적 자원 중 무엇을 먼저 찾을까요?스프링 MVC는 특정 경로에 대해 먼저 컨트롤러 매핑을 찾고, 없으면 정적 자원을 찾습니다. 이를 통해 웹 기능을 우선 처리할 수 있습니다.회원 가입처럼 서버 상태..
2025.09.22 -
스프링 빈과 의존관계
컴포넌트 스캔과 자동 의존관계 설정회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비하자.memberService가 스프링 빈으로 등록되어 있지 않다.스프링 빈을 등록하는 2가지 방법컴포넌트 스캔과 자동 의존관계 설정 자바 코드로 직접 스프링 빈 등록하기컴포넌트 스캔 원리 `@Component` 애노테이션이 있으면 스프링 빈으로 자동 등록된다. `@Controller` 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다. `@Component` 를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다. `@Controller` `@Service` `@Repository` `memberService` 와 `memberRepository` 가 스프링 컨테이너에 스..
2025.09.20 -
회원 관리 예제 - 백엔드 개발
비즈니스 요구사항 정리데이터: 회원ID, 이름기능: 회원 등록, 조회아직 데이터 저장소가 선정되지 않음(가상의 시나리오)일반적인 웹 어플리케이션 계층 구조컨트롤러: 웹 MVC의 컨트롤러 역할서비스: 핵심 비즈니스 로직 구현리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨클래스 의존관계아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민중인 상황으로 가정개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용회원 도메인과 리포지토리 만들기회원 리포지토리 ..
2025.09.19