본문 바로가기

전체 글69

[1주차 / 숫자야구] 1. 설계 프로젝트를 시작하며 가장 먼저 고민한 부분은 "어떻게 기능들을 분리하여 개별적인 클래스들을 구성할 수 있을까?" 라는 고민이었다. 아래는 README.md를 작성하기 전 생각했던 것들이다. 가장 먼저, 숫자 야구의 흐름을 생각해 보자. 상대방(컴퓨터)는 랜덤한 3개의 중복되지 않는 숫자를 선택한다. 사용자는 3개의 중복되지 않는 숫자를 입력한다. 상대방은 사용자의 입력과 정답을 비교하고, 결과를 알려준다. 사용자의 입력이 정답이라면 게임 종료, 그렇지 않다면 2번으로 돌아간다. 위의 흐름에서 3개의 큰 객체들을 분리했다. Computer 각 게임에서 사용될 정답을 랜덤으로 선택한다. 사용자의 입력과 정답을 비교하고, 결과를 알려준다. Player 사용자의 입력을 처리한다. 게임 중 : 3 개의 중복되지 .. 2023. 10. 21.
0. 카테고리 설명 해당 카테고리에서는 나의 직접적인 코드를 나열하지는 않을 생각이다. 내가 이 카테고리에서 공유하고 싶은 건 "내가 얼마나 코드를 잘 짰는가?" 가 아닌, "어떤 생각을 하며 과제를 진행했는가?" 이기 때문이다. 다만, 우리는 모두 프로그래머이기에 생각만 나열한다면 굉장히 추상적인 글이 될 것 같아, 중간중간 필요한 경우 코드를 첨부하거나, 매 포스팅마다 gitHub Repository는 공유해 둘 생각이다. 각각의 포스팅은 과제를 진행하며 비공개로 올려 두었다가, 과제가 끝난 이후 공개로 전환할 생각이다! 함께 4주동안 함께 성장해 봅시다!! 파이팅 :) 2023. 10. 21.
BindingResult 테스트하기 BindingResult는 Spring에서 제공하는 인터페이스로, 폼 데이터의 검증 결과를 담기 위해 사용한다. 우리가 SpringMVC를 구현했다고 가정하자. 우리는 컨트롤러가 검증 로직을 잘 수행하는지 테스트 하고 싶다. 컨트롤러는 필드 에러들을 BindingResult에 담기 때문에, BindingResult 객체를 테스트코드에서 받아올 수 있다면 검증 로직의 수행 결과를 쉽게 확인할 수 있을 것이다. 간단한 코드 설명 내가 현재 진행중인 코드 중 일부를 간단하게 수정해 살펴보자. 모델 우선, 검증을 수행할 클래스이다. @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class Model { @NotBlank private String .. 2023. 10. 17.
5-4. 회원 기능 통합 테스트 MockMVC Controller에 HTTP 요청을 만들어 전송하기 위해서 MockMVC를 사용해 주었다. 테스트 클래스에 다음의 두 어노테이션을 추가해 준다. @SpringBootTest @AutoConfigureMockMvc @AutoConfigMockMVC는 객체를 JSON타입으로, JSON 타입을 객체로 변환해 주기 위한 ObjectMapper와 임의의 HTTP 요청을 만들어 줄 MockMVC를 사용하기 위해 추가한다. 통합 테스트를 진행하기 위해 각각의 스프링 빈은 의존관계 주입이 진행되어야 하기에 @SpringBootTest를 사용해 주었다. 만약 @SpringBootTest를 사용하지 않으면 @Autowired를 사용해 UserController 객체를 가지고 오더라도 해당 객체 내부에 존재.. 2023. 9. 28.
MockMVC를 사용한 Form 데이터 전송 이번 글에서 MockMVC를 사용해 Form 데이터를 전송하는 요청을 만들어 보자. 태그 데이터의 전송 MockMVC를 알아보기 전에 Form 태그의 데이터 전송 방법을 먼저 알아보자. Http 통신에서 데이터는 파라미터, 또는 메시지 바디를 통해 전송된다. 그렇다면 form 태그를 통해 입력된 데이터는 어떤 방식으로 전송될까? 아래 코드는 개인적으로 진행하고 있는 프로젝트의 뷰의 일부이다. 이름 ID 비밀 번호 회원가입 회원 가입 버튼을 누르면 /user/join URL로 Post 요청을 보내게 된다. 회원 가입 요청에 대해 다음과 같은 요청을 확인할 수 있다. Payload에서 데이터 역시 확인할 수 있다. 조금 더 데이터를 자세히 보기 위해 Controller를 다음과 같이 만들어 보자. @Cont.. 2023. 9. 28.
5-3. 회원 기본 기능 구현 (Controller) 이제 웹 페이지에서 회원 기능을 사용할 수 있도록 Controller를 만들어 API를 제공하고, 뷰를 제공해 보자. Model 생성 Controller 계층에서 사용할 모델을 추가해 준다. Service 계층에서 사용할 모델과 크게 다르지 않다. @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class WebUser { private String userName; private String id; private String password; } 이번에도 마찬가지로 Model 변환 클래스를 따로 하나 만들어 사용하자. public class WebUserMapper { public static ServiceUser getServiceUser.. 2023. 9. 28.