지난 시간에는 'User DTO'와 'JPA를 통해 User 데이터를 DB에 저장하기 위한 Repository와 Service 클래스'를 구현해보았다.
(지난 게시글 보러가기)
이어서 오늘은, 'Repository와 Service클래스를 스프링빈으로 등록하기 위한 Config 클래스'와
'Servlet을 사용한 Controller'를 구현하도록 하겠다.
사용자 Config 생성
MainConfig.java
@Configuration
public class MainConfig {
private DataSource dataSource;
private EntityManager em;
@Autowired
public MainConfig(DataSource dataSource, EntityManager em) {
this.dataSource = dataSource;
this.em = em;
}
@Bean
public UserRepository userRepository() { return new JpaUserRepository(em); }
@Bean
public UserServiceImpl userService(){ return new UserServiceImpl(userRepository()); }
}
@Configuration 어노테이션으로 스프링 컨테이너에 MainConfig를 설정 파일이라고 알려준다.
그리고 싱글톤으로 사용할 EntityManager를 만들고 나머지는 @Bean 어노테이션 작성 후 관계에 맞게 코드를 작성했다.
Servlet Controller 생성
이제 URL을 매핑해줄 Controller만 생성하면 기능 구현이 끝난다.
UserDataServlet.java
@WebServlet(name = "userDataServlet", urlPatterns = "/user/register")
public class UserDataServlet extends HttpServlet {
@Autowired
private UserServiceImpl userService;
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
System.out.println("messageBody = " + messageBody);
User user = objectMapper.readValue(messageBody, User.class);
response.getWriter().write("ok");
//db에 저장
userService.join(user);
}
}
생성한 클래스에 extends HttpServlet를 해주고 @WebServlet 어노테이션을 작성한다.
@WebServlet(name="서블렛 이름" / urlPatterns="매핑할 url")
다음으로 스프링 컨테이너에서 UserServiceImpl을 불러오고, 서버에 도착한 Json을 User DTO 형태로
변환해줄 ObjectMapper도 작성한다.
이제 본격적으로 매핑한 url이 입력되면 호출할 service 함수를 작성하자
(인텔리제이 기준 Ctrl + O 단축키를 눌렀을때 나오는 protected 유효범위의 service함수를 가져오면 된다.)
request.getInputStream()으로 request된 값(로그인정보)를 받아오자
그리고 StreamUtils.copyToString을 통해 받아온 로그인 정보를 UTF-8 인코딩 형태로 변환하고
String 형 messageBody에 저장한다. 그리고 아까 작성한 ObjectMapper로 messageBody(Json형태)를 User.class(DTO)
형태로 변환하고 userService.join(user); 로 DB에 저장하도록 한다.
+ 추가로 실행이 제대로 됐는지 확인하기 위해 response.getWriter()로 화면에 멋지게 "ok"싸인 한번 날려주었다.
테스트 성공 후 DB를 초기화하고 안드로이드에서 보내온 데이터도 잘 저장하는지 테스트 했다.
안드로이드에서 전송받은 데이터를 DB에 저장하는 데에도 성공했다.
(FoodPlace로 되어있는 안드로이드 화면은 추후에 변경될 예정이다.)
이로써 로그인 정보를 받아 DB에 저장하는 기능 구현을 해냈다.
아직 많이 부족하지만 하나하나 기능을 구현하면서 재미가 붙고 실력도 늘어가는 것 같다.
발전을 위해 계속해서 배우려는 자세를 가지고 학습해 나갈 것이다.
미래 목표 직장을 향해 화이팅하자!
'프로젝트' 카테고리의 다른 글
[SpringBoot] [어따세워] Amazon S3와 @RestController를 이용해 리뷰 기능 구현하기(2) - Review Upload 기능 개발 (2) | 2022.01.03 |
---|---|
[SpringBoot] [어따세워] 전화번호로 주차장 찾기 기능 추가! (2) | 2021.12.14 |
[SpringBoot] [어따세워] Servlet, JPA, MySQL 이용해서 회원가입 서비스 만들기!(1) (0) | 2021.12.05 |
[어따세워] 메타버스 스터디룸 (Gather town) (0) | 2021.11.30 |
[SpringBoot] [어따세워] 첫 백엔드 프로젝트 기획 (2) | 2021.11.29 |