본문 바로가기

Spring

(15)
[토비의 스프링 3.1 vol.1] 1장. 오브젝트와 의존관계(1) 스프링이 자바에서 가장 중요하게 가치를 두는 것은 바로 객체지향 프로그래밍이 가능한 언어라는 점이다. 잃어버렸던 객체지향 기술의 진정한 가치를 회복시키고, 그로부터 객체지향 프로그래밍이 제공하는 폭넓은 혜택을 누릴 수 있도록 기본으로 돌아가자는 것이 바로 스프링의 핵심 철학(👉POJO)이다. 스프링이 가장 관심을 두는 대상은 오브젝트이다. 스프링은 객체지향 설계와 구현에 관해 특정한 모델과 기법을 억지로 강요하지는 않는다. 하지만 오브젝트를 어떻게 효과적으로 설계하고 구현하고, 사용하고, 이를 개선해나갈 것인가에 대한 명쾌한 기준을 마련해준다. [초난감 DAO] User 사용자 정보를 저장할 때는 자바빈 규약을 따르는 오브젝트를 이용하면 편리하다. 자바빈 규약 기본 생성자 필수 default packag..
[토비의 스프링 3.1 vol.1] 스프링이란? 스프링의 성공요인 [스프링이란 무엇인가?] 스프링은 자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크이다. 애플리케이션 프레임워크는 애플리케이션 개발을 빠르고 효율적으로 할 수 있도록 애플리케이션의 바탕이 되는 틀(스프링 컨테이너)과 공통 프로그래밍 모델(IoC/DI, 서비스 추상화, AOP), 기술 API 등을 제공해준다. 스프링의 모든 기술은 표준 자바 엔터프라이즈 플랫폼(JavaEE)에 기반을 두고 있다. 애플리케이션의 기본 틀 - 스프링 컨테이너 스프링 컨테이너는 설정정보를 참고로 해서 애플리케이션을 구성하는 오브젝트를 생성하고 관리한다. 공통 프로그래밍 모델 - IoC/DI, 서비스 추상화, AOP 프레임워크는 애플리케이션을 구성하는 오브젝트가 생성되고 동작하는 방식에 대한 틀을 제공해줄 뿐만..
Distpatcher Servlet(디스패처 서블릿) 개념과 동작과정 [Dispatcher Servlet(대스패처 서블릿) 이란?] Dispatcher Servlet에서 Dispatch의 의미는 보내다, 급파하다 등의 의미를 갖고 있다. 이를 해석해보면 Dispatcher Servlet이 받은 요청을 어딘가로 빨리 보내는 Servlet이라고 할 수 있다. 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller) 라고 정의할 수 있다. Spring 이전에... 서블릿 컨테이너가 매핑할 서블릿을 확인하기 위해서 web.xml을 읽어서 매핑을 해준다. 접속을 하려는 경로는 여러개이며 서블릿 객체 하나는 하나의 경로만 담당하기에 매번 web.xml에 등록해주어야 하는 번거로움이 있었다. 프로세스의 요청마다 객체가 생성되는 문제점이 ..
@RequiredArgConstructor과 @AllArgConstructor의 차이점 @RequiredArgConstructor 필수 인수가 있는 생성자를 생성한다 필수 인수는 초기화되지 않은 final 및 @NonNull과 같은 제약 조건이 있는 필드이다 기본 액세스 수정자는 public이다 @RequiredArgConstructor는 다음 field들을 생성하지 않는다 1. final이 아닌 field 2. 초기화가 된 final field 3. static field 4. 초기화 된 non-null field @AllArgConstructor 모든 필드 값을 파라미터로 받는 생서자를 만든다
[JPA]mappedBy reference an unknown target entity property mappedBy reference an unknown target entity property: jpabook.jpashop.domain.Order.member in jpabook.jpashop.domain.Member.orders 발생원인 jpabook.jpashop.domain.Order.member in jpabook.jpashop.domain.Member.orders Order에서 member와 Member의 orders 조인 맵핑을 해주는 부분에 오류가 있다는 에러이다 자세히 보면 정말 바보같은 실수를 했다 Order클래스에서 @ManyToOne 어노테이션을 붙여서 private Member memberId;라고 선언이 되어있다 반면에 Member클래스에서는 @OneToMany(mappedBy ..
com.zaxxer.hikari.pool.HikariPool : HikariPool-2 - Exception during pool initialization. com.zaxxer.hikari.pool.HikariPool : HikariPool-2 - Exception during pool initialization. 발생원인 ERROR 17616 --- [ Test worker] com.zaxxer.hikari.pool.HikariPool : HikariPool-2 - Exception during pool initialization. java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. 데이터베이스 서버에 대한 연결을 생성할 수 없습니다.라는 오류 이다 AWS를 통해 배포를 하..
Required request parameter 'linkId' for method parameter type String is not present Required request parameter 'linkId' for method parameter type String is not present 발생 원인 요청 쿼리 스트링에 'linkId' 필드가 없게 되면서 메소드 매개변수 유형 문자열에 대한 필수 요청 매개변수 'linkId'가 없다 (Required request parameter 'linkId' for method parameter type String is not present)라는 오류가 발생했습니다 제목 내용 저장 form태그에서 submit을 통해 linkId와 idUser 값을 보냈지만 사진에 나온 것처럼 @RequestParam 어노테이션을 통해서 받는 값이 없어 발생한 오류이다 정리할 내용 HTML에서 form태그를 통해 met..
No identifier specified for entity 에러 해결 방법 No identifier specified for entity 에러 해결 방법 발생 원인 No identifier specified for entity를 해석해보면 엔티티에 대해 지정된 식별자가 없습니다이다 Question 클래스를 @Entity를 통해 엔티티로 지정을 했는데 해당 엔티디에서 식별자가 지정되지 않아서 오류가 발생했다 정리할 내용 Entity는 데이터베이스에서 테이블 전체를 엔티티라고 한다 테이블에서 하나의 행이 엔티티 객체가 된다 @Entity 클래스가 하나의 엔티티임을 알려준다 @Id 엔티티에서 PK인 값을 지정해준다 @GeneratedValue PK가 자동으로 1씩 증가되도록 해준다 해결 @Id 엔터티로 식별자 지정을 해줌 막상 지정할때까지 단순히 오류 처리를 해결하기 위해서 하나 선..
SELECT에서 NVL을 통해 값이 없어도 0을 반환하게 했는데 NULL이 반환된 경우 SELECT에서 NVL을 통해 값이 없어도 0을 반환하게 했는데 NULL이 반환된 경우 발생한 오류 No value present → 값이 존재하지 않는다 SELECT NVL(MAX(USER_ID), 0) FROM USER user_id의 최대값을 구하고 그 값이 null일때 NVL 함수를 통해서 0을 반환하게끔 쿼리를 작성 했지만 No value present오류 발생을 했다 발생 원인 프로젝트를 하면서 사용한 Database의 종류는 MySQL이었다 검색을 통해 알게 된 사실 NVL 함수는 Oracle을 지원하고 MySQL을 지원하지 않는다 사용하는 Database에서 지원하지 않는 함수를 사용했기 때문에 NULL이 반환되어서 값이 없다는 오류를 받게 된 것이다 정리할 내용 NULL을 다른 값으로 대..
Controller를 등록해줬지만 localhost:8080 입력시 Whitelabel Error Page가 뜬 경우 Controller를 등록해줬지만 localhost:8080 입력시 Whitelabel Error Page가 뜬 경우 첨부된 이미지를 참고해서 보면 스프링부트가 정상적으로 실행되었고 내장된 톰캣 서버가 8080포트로 정상적으로 실행된 것을 볼 수 있다 아무 웹페이지도 없이 실행만 테스트한 경우라면 Whitelabel Error Page가 나오는 것은 정상 이지만 Controller를 통해서 localhost:8080 페이지를 만들어 줬기 때문에 현재 보이는 Whitelabel Error Page가 오류로 발생한 것임을 알수 있다 발생 원인 Controller를 컴포넌트 스캔이 이루어지는 패키지 하위에 만들지 않고 바깥에 생성함 (바보같은 실수...) (인프런 스프링 -김영한님 강의로 알고 있었는데 이상한..