스프링 부트와 AWS로 혼자 구현하는 웹서비스
혼자서 강의 들으면서 부족한점이 많은것같아 이책을 사게되었다 그래서 3월부터 토익 시험과 책을 목표로 계획을 잡았다.
3월부터 같이 불멸의 데드락이라는 스터디를 같이 하게되었으며 취업할때까지 서로 원하는 목표로 계획을 세우고 서로 피드백을 하는등 여러가지를 같이하게됬었다.
# 3월 계획
- 토익 3/12, 3/26일에 시험보기
- 스프링 부트와 AWS로 혼자 구현하는 웹페이지 완독
- 이펙티브자바 매일 2장씩 읽기를 목표로 두고있다.

# 오늘 알게된내용
1.jcenter()와 mavencentral() 혼용되서 사용하지만 최신라이브러리 사용하려면 mavencentral()를 이용.

2. intellj git .gitignore 사용이유
.idea 디렉토리는 IntelliJ IDEA IDE에서 프로젝트 설정을 저장하는 디렉토리입니다. 이 디렉토리에는 프로젝트 설정, 라이브러리 의존성, 컴파일된 클래스 파일 등이 포함되어 있습니다. 이 디렉토리를 Git으로 관리하면 다른 개발자들이 IntelliJ IDEA에서 프로젝트를 실행할 때 문제가 발생할 수 있습니다.
3. 테스트 코드 작성
package com.dawon.book.springboot.web;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
- @RestController 어노테이션은 해당 클래스가 REST API를 처리하는 컨트롤러임을 나타냅니다.
- @GetMapping("/hello") 어노테이션은 GET 메소드를 처리하는 API endpoint를 /hello 경로로 매핑합니다.
- hello() 메소드는 GET 요청을 처리하는 메소드로, /hello 경로로 요청이 들어왔을 때 "hello" 문자열을 반환합니다.
따라서, 이 코드를 실행하면 localhost:8080/hello 경로로 GET 요청이 들어왔을 때 "hello" 문자열이 반환됩니다.
3-2 테스트코드
package com.dawon.book.springboot.web;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
@SpringJUnitConfig
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void helloTest() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/hello"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("hello"));
}
}
- @SpringJUnitConfig 어노테이션은 테스트 클래스가 Spring Boot 애플리케이션 컨텍스트를 로드하여 사용할 수 있도록 합니다.
- @WebMvcTest(controllers = HelloController.class) 어노테이션은 HelloController 클래스를 테스트하기 위해 필요한 빈들만 로드하여 테스트할 수 있도록 합니다.
- private MockMvc mockMvc 필드는 Spring의 MockMvc 객체를 주입받아 테스트에서 사용할 수 있도록 합니다.
- helloTest() 메소드는 HelloController의 /hello API endpoint가 제대로 동작하는지 확인하는 테스트입니다. MockMvcRequestBuilders.get("/hello")를 호출하여 /hello 경로로 GET 요청을 보내고, MockMvcResultMatchers.status().isOk()를 사용하여 응답 코드가 200인지 확인하며, MockMvcResultMatchers.content().string("hello")를 사용하여 응답 본문이 "hello"인지 확인합니다.
따라서, 이 테스트를 실행하면 /hello 경로로 GET 요청이 들어왔을 때 응답 코드가 200이고, 응답 본문이 "hello"인지 확인합니다.
4. 테스트코드 추세

예시
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User getUser(Long id) {
return userRepository.findById(id).orElse(null);
}
public List<User> getUsers() {
return userRepository.findAll();
}
}
이 클래스를 테스트하는 경우, @SpringBootTest와 @Autowired를 사용하여 UserRepository 빈을 주입받아 사용할 수도 있지만, 각각의 테스트 케이스에서 필요한 빈을 직접 생성하거나, Mock 객체를 사용하여 테스트할 수 있습니다.
public class UserServiceTest {
private UserService userService;
private UserRepository userRepository;
@BeforeEach
public void setUp() {
userRepository = Mockito.mock(UserRepository.class);
userService = new UserService(userRepository);
}
@Test
public void testGetUser() {
User user = new User(1L, "John Doe", "john@example.com");
Mockito.when(userRepository.findById(1L)).thenReturn(Optional.of(user));
User result = userService.getUser(1L);
assertEquals(user, result);
}
@Test
public void testGetUsers() {
List<User> users = Arrays.asList(
new User(1L, "John Doe", "john@example.com"),
new User(2L, "Jane Doe", "jane@example.com")
);
Mockito.when(userRepository.findAll()).thenReturn(users);
List<User> result = userService.getUsers();
assertEquals(users, result);
}
}
위 코드에서는 @BeforeEach 어노테이션을 사용하여 각각의 테스트 케이스가 실행되기 전에 UserRepository의 Mock 객체를 생성하고, UserService 클래스의 생성자에 주입하여 사용합니다. 이를 통해 UserRepository의 동작을 확인하며 UserService 클래스의 테스트를 수행할 수 있습니다.
'취업 준비' 카테고리의 다른 글
취업 준비(1~6월까지) 지금까지 공부한 내용 (0) | 2023.06.09 |
---|---|
신입 /취준생 백엔드 개발자 유용한 정보 모음집(2) (0) | 2022.12.16 |
신입 /취준생 백엔드 개발자 유용한 정보 모음집 (1) | 2022.12.13 |
스프링 부트와 AWS로 혼자 구현하는 웹서비스
혼자서 강의 들으면서 부족한점이 많은것같아 이책을 사게되었다 그래서 3월부터 토익 시험과 책을 목표로 계획을 잡았다.
3월부터 같이 불멸의 데드락이라는 스터디를 같이 하게되었으며 취업할때까지 서로 원하는 목표로 계획을 세우고 서로 피드백을 하는등 여러가지를 같이하게됬었다.
# 3월 계획
- 토익 3/12, 3/26일에 시험보기
- 스프링 부트와 AWS로 혼자 구현하는 웹페이지 완독
- 이펙티브자바 매일 2장씩 읽기를 목표로 두고있다.

# 오늘 알게된내용
1.jcenter()와 mavencentral() 혼용되서 사용하지만 최신라이브러리 사용하려면 mavencentral()를 이용.

2. intellj git .gitignore 사용이유
.idea 디렉토리는 IntelliJ IDEA IDE에서 프로젝트 설정을 저장하는 디렉토리입니다. 이 디렉토리에는 프로젝트 설정, 라이브러리 의존성, 컴파일된 클래스 파일 등이 포함되어 있습니다. 이 디렉토리를 Git으로 관리하면 다른 개발자들이 IntelliJ IDEA에서 프로젝트를 실행할 때 문제가 발생할 수 있습니다.
3. 테스트 코드 작성
package com.dawon.book.springboot.web;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
- @RestController 어노테이션은 해당 클래스가 REST API를 처리하는 컨트롤러임을 나타냅니다.
- @GetMapping("/hello") 어노테이션은 GET 메소드를 처리하는 API endpoint를 /hello 경로로 매핑합니다.
- hello() 메소드는 GET 요청을 처리하는 메소드로, /hello 경로로 요청이 들어왔을 때 "hello" 문자열을 반환합니다.
따라서, 이 코드를 실행하면 localhost:8080/hello 경로로 GET 요청이 들어왔을 때 "hello" 문자열이 반환됩니다.
3-2 테스트코드
package com.dawon.book.springboot.web;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
@SpringJUnitConfig
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void helloTest() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/hello"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("hello"));
}
}
- @SpringJUnitConfig 어노테이션은 테스트 클래스가 Spring Boot 애플리케이션 컨텍스트를 로드하여 사용할 수 있도록 합니다.
- @WebMvcTest(controllers = HelloController.class) 어노테이션은 HelloController 클래스를 테스트하기 위해 필요한 빈들만 로드하여 테스트할 수 있도록 합니다.
- private MockMvc mockMvc 필드는 Spring의 MockMvc 객체를 주입받아 테스트에서 사용할 수 있도록 합니다.
- helloTest() 메소드는 HelloController의 /hello API endpoint가 제대로 동작하는지 확인하는 테스트입니다. MockMvcRequestBuilders.get("/hello")를 호출하여 /hello 경로로 GET 요청을 보내고, MockMvcResultMatchers.status().isOk()를 사용하여 응답 코드가 200인지 확인하며, MockMvcResultMatchers.content().string("hello")를 사용하여 응답 본문이 "hello"인지 확인합니다.
따라서, 이 테스트를 실행하면 /hello 경로로 GET 요청이 들어왔을 때 응답 코드가 200이고, 응답 본문이 "hello"인지 확인합니다.
4. 테스트코드 추세

예시
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User getUser(Long id) {
return userRepository.findById(id).orElse(null);
}
public List<User> getUsers() {
return userRepository.findAll();
}
}
이 클래스를 테스트하는 경우, @SpringBootTest와 @Autowired를 사용하여 UserRepository 빈을 주입받아 사용할 수도 있지만, 각각의 테스트 케이스에서 필요한 빈을 직접 생성하거나, Mock 객체를 사용하여 테스트할 수 있습니다.
public class UserServiceTest {
private UserService userService;
private UserRepository userRepository;
@BeforeEach
public void setUp() {
userRepository = Mockito.mock(UserRepository.class);
userService = new UserService(userRepository);
}
@Test
public void testGetUser() {
User user = new User(1L, "John Doe", "john@example.com");
Mockito.when(userRepository.findById(1L)).thenReturn(Optional.of(user));
User result = userService.getUser(1L);
assertEquals(user, result);
}
@Test
public void testGetUsers() {
List<User> users = Arrays.asList(
new User(1L, "John Doe", "john@example.com"),
new User(2L, "Jane Doe", "jane@example.com")
);
Mockito.when(userRepository.findAll()).thenReturn(users);
List<User> result = userService.getUsers();
assertEquals(users, result);
}
}
위 코드에서는 @BeforeEach 어노테이션을 사용하여 각각의 테스트 케이스가 실행되기 전에 UserRepository의 Mock 객체를 생성하고, UserService 클래스의 생성자에 주입하여 사용합니다. 이를 통해 UserRepository의 동작을 확인하며 UserService 클래스의 테스트를 수행할 수 있습니다.
'취업 준비' 카테고리의 다른 글
취업 준비(1~6월까지) 지금까지 공부한 내용 (0) | 2023.06.09 |
---|---|
신입 /취준생 백엔드 개발자 유용한 정보 모음집(2) (0) | 2022.12.16 |
신입 /취준생 백엔드 개발자 유용한 정보 모음집 (1) | 2022.12.13 |