인텔리제이 빌드 후 실행하기콘솔로 이동 후 ./gradlew buildcd build/libsjava -jar hello-spring-0.0.1-SNAPSHOT.jar실행확인문제 있을땐 gradlew clean build정적컨텐츠그냥 파일을 그대로 내려줌MVC와 템플릿
웹 애플리케이션 계층 구조 컨트롤러: 웹 MVC의 컨트롤러 역할 서비스: 핵심 비즈니스 로직 구현 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨
@Component 스프링 컨테이너가 스프링 뜰 때 컨트롤러 어노테이션이 있으면 객체를 생성해서 넣어두고 스프링이 관리한다 = 스프링 빈이 관리된다 정형화 된 패턴 컨트롤러 서비스 레포지토리 컨트롤러를 통해 외부 요청을 받고 서비스에서 비즈니스 로직을 만들고 레포지
초심자의 마음으로 (몇번째인지 모르겠지만) 스프링 샅샅이 파헤치기 시작 ! > 스프링이란? 스프링 프레임워크는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크이다. 여기서 프레임워크란 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조라고 사전적
의존 주입이란?(Dependency Injection)의존이란 변경에 의해 영향을 받는 관계를 의미한다. 의존 주입은 객체 자체가 아니라 Framework에 의해 객체의 의존성이 주입되는 설계 패턴인데 IOC와 연결되는 개념이다. DI는 의존하는 객체를 직접 생성하는
의존 자동 주입 의존 대상을 설정 코드에서 직접 주입하지 않고 스프링이 자동으로 의존하는 빈 객체를 주입해주는 기능을 자동 주입이라고 한다. 아래는 설정 코드에서 직접 주입한 코드이다. >@Autowired 어노테이션을 이용한 의존 자동 주입 자동 주입 기능을 사
컴포넌트 스캔컴포넌트 스캔은 스프링이 직접 클래스를 검색해서 빈으로 등록해주는 기능이다. 설정 클래스에 빈으로 등록하지 않아도 원하는 클래스를 빈으로 등록할 수 있어 설정 코드가 크게 줄어든다.@Component스프링이 검색해서 빈으로 등록할 수 있으려면 클래스에 @C
컨테이너 초기화와 종료스프링 컨테이너는 초기화와 종료라는 라이프 사이클을 갖는다.스프링 컨테이너는 설정 클래스에서 정보를 읽어와 알맞은 빈 객체를 생성하고 각 빈을 연결(의존 주입) 하는 작업을 수행한다.컨테이너 초기화가 완료되면 컨테이너는 사용할 수 있다. 컨테이너를
AOPAspect Oriented Programming ✨ 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법이다. 고통 기능 구현과 핵심 기능 구현을 분리하는 것이 AOP의 핵심이다.AOP의 기본 개념은 핵심 기능에 공통 기능을
프록시 생성 방식실행코드에서 calculator 빈을 받아오는 소스를이렇게 바꾸면 어떻게 될까?RecCalculator 타입을 리턴하니까 아무 문제가 없지 않을까?정답은 ❌ 이다스프링은 AOP를 위한 프록시 객체를 생성할 때 실제 생성할 빈 객체(RecCalculato
JDBC 프로그래밍의 단점을 보완하는 스프링JDBC API를 이용하면 DB 연동에 필요한 Connection을 구한 다음 쿼리를 실행하기 위한 PreparedStatement를 생성한다. 그리고 쿼리를 실행한 뒤에는 finally 블록에서 ResultSet, Prepa
JdbcTemplate 을 이용한 쿼리 실행 JdbcTemplate 은 JDBC 코어 패키지의 중심 클래스이며 자원 생성 및 반환처리로 JDBC 사용을 단순화한다.(데이터 저장을 위해 도와주는 API라고 보면 된다.) 가장 먼저 JdbcTemplate 객체를 생성하고
DB 연동 과정에서 발생 가능한 익셉션
스프링 MVC 시작하기
스프링 MVC 핵심 구성 요소스프링 MVC의 핵심 구성 요소는 DispatcherServlet을 중심으로 이루어져 있다고 볼 수 있다!이전 포스팅에서 설명했지만 다시 한번 짚고 넘어가자면 DispatcherServlet은 Front-Controller 라고 보면 된다
이번 포스팅은 실습 위주이기 때문에 완성 코드와 중간중간 중요했던 내용을 추가로 적어야겠다요청 매핑 어노테이션을 이용한 경로 매핑첫 번째로 @Controller 어노테이션을 이용해 컨트롤러 클래스를 구현한다. 컨트롤러 클래스는 요청 매핑 어노테이션을 사용해서 메서드가
MVC를 사용해 개발하면서 마주친 에러들을 정리해보겠다 ㅠ >🚫 맞닥뜨린 에러1 💡해결 또 다른 해결방법으로는 application.properties에 DB 접속정보를 추가해주는 방법이 있다. >🚫 맞닥뜨린 에러2 💡해결 ComponentScan이
커맨드 객체 : 중첩, 콜렉션 프로퍼티 스프링 MVC는 커맨드 객체가 리스트 타입의 프로퍼티를 가졌거나 중첩 프로퍼티를 가진 경우에도 요청 파라미터의 값을 알맞게 커맨드 객체에 설정해주는 기능을 제공하고 있다. 설문조사 응답자 클래스 설문조사 답변 클래스 규칙1
ㅇㄹ
글로벌 범위 Validator와 컨트롤러 범위 Validator 스프링 MVC는 모든 컨트롤러에 적용할 수 있는 글로벌 Validator와 단일 컨트롤러에 적용할 수 있는 Validator를 설정하는 방법을 제공한다. 이를 사용하면 @Valid 어노테이션을 사용해서
로그인, 비밀번호 변경의 실습 위주라 필요한 내용만 정리해서 적을 거라 오늘 포스팅은 짧다..!컨트롤러에서 HttpSession 사용하기로그인 상태를 유지하는 방법은 크게 HttpSession을 이용하는 방법과 쿠키를 이용하는 방법이 있다. 컨트롤러에서 HttpSess
🙋♀️인터페이스 내에 default 메서드는 상속받지 않아도 되나요? 💡YES! 다만 메서드 앞에 default를 붙이고 구현부가 {} 꼭 존재해야 한다.
커맨드 객체 Date 타입 프로퍼티 변환 처리 : @DateTimeFormat회원 가입 일시를 기준으로 회원을 검색한다고 가정했을 때 입력한 문자열을 LocalDateTime 타입으로 변환해야 하는데, 스프링은 Long이나 int와 같은 기본 데이터 타입으로의 변환은
길고 긴 실습은 거의 끝이 났다이번엔 간단한 웹 어플리케이션의 구조에 대해 정리해보려고 한다!간단한 웹 어플리케이션의 구성 요소간단한 웹 어플리케이션을 개발할 때 사용하는 전형적인 구조는 다음 요소를 포함한다.프론트 서블릿💡 웹 브라우저의 모든 요청을 받는 창구 역할
요즘 회사 다니랴 운동하랴 개인공부하랴 정신이 하나도 없다 😵💫 졸려죽겠지만 1포스팅 시작 !! > JSON
@RequestBody로 JSON 요청 처리 JSON형식의 요청 데이터를 자바 객체로 변환하려면 어떻게 할까 ?! POST 방식이나 PUT 방식을 사용하면 name=이름&age=나이 와 같은 쿼리 문자열 형식이 아니라 JSON 형식의 데이터를 요청 데이터로 전송할 수
프로필과 프로퍼티 파일개발을 진행하는 동안에는 실제 서비스 목적으로 운영중인 DB를 이용할 수 없다. 따로 개발용 DB를 사용하거나 개발 PC에 직접 DB를 설치해서 사용한다.실 서비스 장비에 배포하기 전 설정 정보를 변경하고 배포하는 방법을 사용할 수도 있지만 이 방
프로퍼티 파일을 이용한 프로퍼티 설정스프링은 외부의 프로퍼티 파일을 이용해서 스프링 빈을 설정하는 방법을 제공하고 있다.이 파일의 프로퍼티 값을 자바 설정에서 사용할 수 있으며 이를 통해 설정 일부를 외부 프로퍼티 파일을 사용해 변경할 수 있다.@Configuratio
잘 모르겠어서 정리해보는 연관관계 매핑테이블은 외래키 값 하나로 양방향 테이블 조회가 가능하지만 객체는 그렇지 않다⛔️ 뭔가 객체지향스럽지 않은 문제 코드 예시테이블에 맞춰 외래키 값을 그대로 가지고 있을 경우 연관관계가 없기 때문에 member와 연관된 team을 가
개념은 자꾸 까먹기 쉬우니 적어두고 잊지말기 ! ! !@SpringBootTest(classes = ApiApplication.class)스프링 부트는 @SpringBootTest 어노테이션을 통해 스프링부트 어플리케이션 테스트에 필요한 거의 모든 의존성을 제공한다.@
공통점데이터 전달을 위해 사용됨uri를 통해 값을 전달함차이점@RequestParamSymantic Url (ex. http://localhost/test/1/test/2)default 값 설정 가능@PathVariableQueryString (ex. http
> 스프링 시큐리티의 의존성 추가 시 일어나는 일들 서버가 기동되면 스프링 시큐리티의 초기화 작업 및 보안 설정이 이루어진다 별도의 설정이나 구현을 하지 않아도 기본적인 웹 보안 기능이 현재 시스템에 연동되어 작동한다 모든 요청은 인증이 되어야 자원에 접근이 가능하
쉴 때 기초를 탄탄히 ~!! > 웹 서버, 웹 애플리케이션 서버 ‼️ 모든 형태의 데이터는 HTTP 프로토콜을 기반으로 주고 받음 ‼️ Web Server HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적(파일) HTML, CSS, JS, 이미지, 영
프로젝트 생성 환경 Gradle - Groovy Java 11 spring web, lombok Spring boot 3.0.1 War 🚫 war로 프로젝트 생성 시 해당 에러를 만날 수 있는데 이 때 해결법은 prefere
쥬의! javex.* 이 Jakarta.* 로 변경됨에 따라 jsp 의존성 주입 할 때 요걸로 해줘야함 아님 그래들 빌드가 안된다. > MVC 패턴 - 개요 MVC 패턴의 필요 이유 너무 많은 역할 - 서블릿이나 jsp로 개발하게 되면 비즈니스 로직과 뷰 로직까
프론트 컨트롤러 패턴 특징프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출입구를 하나로공통 처리 가능프론트 컨트롤러를 제외한 나머지는 컨트롤러는 서블릿을 사용하지 않아도 됨프론트 컨트롤러 도입HTTP 요청이 들어
예전에 정리했던 내용 참고 !https://velog.io/@eeun95/작심구일러의-스프링-시작하기9DispatcherServlet 구조스프링 MVC의 프론트 컨트롤러가 바로 디스패쳐 서블릿이다. 이 디스패쳐 서블릿이 바로 스프링 MVC의 핵심!dispatc
로깅SLF4J : 인터페이스Logback : 구현체로그 라이브러리를 통합해서 인터페이스로 제공하는 것이 SLF4J이다.🚫log.trace("trace log={}", name)log.trace("trace log={}"+name)trace가 출력되지 않는 레벨에서도
BindingResult스프링이 제공하는 검증 오류를 보관하는 객체, 겆믕 오류가 발생하면 여기에 보관하면 된다.BindingResult가 있으면 @ModelAttribute에 데이터 바인딩 시 오류가 발생해도 컨트롤러가 호출된다.BindingResult가 없으면 40
Bean Validation 특정 구현체가 아닌 Bean Validation 이라는 기술 표준이다. 검증 어노테이션과 여러 인터페이스의 모음이다.(=JPA가 기술, 하이버네이트가 구현체인 것과 같음) Bean Validation을 구현한 기술 중에 일반적으로 사용하
개인 프로젝트를 만들어보면서 대강만 알고 쓰는 게 참 많다는 걸 느꼈다.내 사전에 대강만 안다는 건 말이 안되지 👩💻❌ 아주아주 기초적이고 세세한 것도 모두 정리 ~!!(갠플젝 피드백 해주신 전직장 주임님께 무한감사를 드립니다)@RestController@Cont
@Builder > @NoArgsConstructor > @AllArgsConstructor
멀티 모듈 !최근 개인 프로젝트+실습 과제 등등 멀티 모듈을 적용해볼 일이 많았다. 말로만 하면 그저 모듈을 분리하면 되는 것이 아닌가 하겠지만 막상 적용하려면 무수한 오류를 맞닥뜨린다.이 오류들이 나의 밑거름이 될 수 있도록 오늘도 포스팅하여 잊지 않기!생성방법멀티