Spring(Web)
-
Spring 완전정복 6 - 데이터베이스 연동, 통합 테스트Spring(Web) 2022. 4. 22. 21:31
강의에서는, H2 데이터베이스를 이용해 멤버 데이터들을 저장하는것을 알려주었다. 실제 구현부 (JdbcMemoryRepository)를 볼 때에는, 학교에서 실습했었던 oracle db가 생각났었던.. 강의였다. 1. 실행 할 쿼리문 정의 2. getConnection 메소드를 이용해 데이터베이스와 연결 생성. 3. 커넥션에서 쿼리문을 이용해 PreaparedStatement 생성. 4. 실행 할 쿼리문에 데이터를 넘겨줌. 과 같은 형태로 데이터베이스와 통신하는 방법이다. 다만, 이와같이 데이터베이스와 통신 할 때에는 예외를 throw하는 경우가 많으므로, 항상 try catch 문과 같이 예외를 처리 할 수 있는 키워드들을 사용해 처리해줘야 한다. 마지막에 통신이 끝난 후 연결을 해제해줘야 서버에 과부..
-
Spring 완전정복 - 5 / 스프링 빈과 의존관계Spring(Web) 2022. 4. 20. 18:47
Spring 컨테이너를 이용해, Controller - Service - Repository를 싱글톤으로 사용 할 수 있는 방법을 배웠다. 기본적으로 1. 컴포넌트 스캔 방식으로, 스프링이 자동으로 컨테이너에 넣음 2. 설정 파일을 만들어, 수동으로 의존관계를 설정 총 두 가지 방법이 있다. 컴포넌트 스캔 첫 번째로, 컴포넌트 스캔 방식은 그저 이어줄 클래스들위에 @Component 어노테이션을 추가해주기만 하면 스프링이 자동으로 컨테이너에 등록해주는 방식이다. 다만 @Service나 @Repository와 같이 특수한 컴포넌트 어노테이션들이 있는데, 각 클래스들의 역할 별로 특수한 컴포넌트 어노테이션을 적용해줘도 잘 작동했다. @Controller public class MemberController ..
-
Spring 완전정복 4 / 테스트 코드(Service)Spring(Web) 2022. 4. 19. 19:09
Repository에 이어서 Service에대한 테스트 코드도 작성했는데, 역시 실제 서비스 실행 부분이기도해서 그런지 Repository 테스트 코드보다는 비교적 어려웠다. 논외로, 강의에서는 "어차피 빌드해도 테스트 코드는 빌드되지 않으니, 테스트 메소드들은 한글이어도 된다"라는 점도 말씀해주셔서 좋았다. 다른 부분들은 이전 Repository 테스트 코드와 별반 다르지 않았지만, dependency injection이 추가된 부분이 조금 혼동스러웠다. 아래 테스트 코드에서는 테스트가 진행될 코드에서 사용된 member Repository 객체를 그대로 가져와서 테스트를 진행한다. MemoryServiceTest Dependency injection (의존성 주입) MemberService membe..
-
Spring 완전정복 - 3 / 테스트 코드(Repository)Spring(Web) 2022. 4. 19. 19:03
실제로 처음 해보는 부분이였는데, assert를 이용해 테스트 코드를 작성하고 테스트해보는 부분이 생각보다 재밌었다. 강의에서 기본적으로 계속 강조됐던 부분은 "어떤 객체든 null이 넘어오는 경우(예외)가 생길 수 있으므로, Optional Wrapper Class를 사용 할것"이다. 기본적으로 42seoul을 할 때는 C언어를 사용하고(if NULL, return NULL등을 이용해 널 처리), 이전에 java를 이용해 개발 할 때에도 그저 컴파일이 안될 때 찾아본 후 null 처리를위해 Optional을 사용한 적은 있었지만, 정확한 이유와 함께 알게된것은 이번이 처음이였다. 예전에 kotlin을 이용해 앱 개발을 했었을 때는 항상 변수 이름 끝에 ?를 붙여 null 체크를 했었던것 같은데.. 아무..
-
Spring 완전정복 - 2 / 서비스 개발(회원 정보)Spring(Web) 2022. 4. 19. 18:47
기본적인 회원 정보를 받아, 저장/관리해주는 서비스를 개발해보기. 회원 정보는 간단하게 id : 서버에서 지정해주는 고유한 id로, sequence 형태로 차례대로 부여함. name : 사용자 이름 과 같은 형태로 정의했다. package hello.hellospring.domain; public class Member { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } ..
-
Spring 완전정복 - 1 / ControllerSpring(Web) 2022. 4. 19. 18:33
Spring에서 페이지를 띄우는 여러 방법 1. 정적 페이지, MVC와 템플릿 엔진 위 그림과 같이 동작하는데, 각각의 경우에 따라 다르게 동작한다. 정적 페이지를 호출 할 경우 -> http://localhost:8080/hello.html GetMapping에 localhost에서 호출한 이름의 컨트롤러가 없을 경우, 따로 컨트롤러를 거치지 않고 static 디렉터리 하위에 있는 html 웹 페이지를 띄움. (html 파일의 이름으로 호출해야함.) 따로 컨트롤러가 없기 때문에, 코드는 없음. 컨트롤러가 있을 경우 -> http://localhost:8080/hello-mvc localhost에서 호출한 이름의 GetMapping 어노테이션이 있다면, 컨트롤러에서 해당 부분을 실행한 후 return하게..