웹 개발/스프링 프레임워크 검색 결과
12건
[스프링] (AA vs. Retrofit) 어노테이션 기반 REST 클라이언트를 위한 프레임워크
연구 계기 중국 게임사 미호요는 자사 게임 커뮤니티 앱 HoYoLab을 운영한다. 이 앱은 게임 관련 공략을 공유하는 기본적인 커뮤니티 기능과 더불어, 유저의 게임 내 데이터를 수치화 & 통계해 보여주는 편의 기능도 제공한다. 원신 유저로써 관련 API들의 엔드포인트 주소를 파악하고 인증 방식을 파훼하여 자바 클라이언트를 작성하고 싶었기 때문에 HoYoLab 안드로이드 APK 파일을 살펴보게 되었다. 그러던던 중 HTTP 클라이언트 호출 서비스가 상당히 깔끔히 작성되어 있음을 발견하였다. 개발자는 클라이언트 서비스의 인터페이스만 작성하면 되었는데, 이들은 어노테이션으로 꾸며져 선언적으로 구성되어 있다. 이런 방식은 스프링 MVC에서 핸들러 매핑을 작성하는 것과도 흡사하다. package com.mihoy..
[스프링 Cloud] Spring Cloud AWS + RDS Read Replica 연동
적용 코드 binchoo-spring-study/aws/rds at master · binchoo/binchoo-spring-study 개요 부하 분산 아키텍처는 단일 엔드포인트를 사용자에게 노출하고, 뒷 단의 트래픽 라우팅은 투명하게 감추는 게 이상적입니다. 아마존 관계형 DB 서비스 RDS는, 비용을 20% 가량 더 지불해 Aurora라는 래퍼를 사용하여 해당 부문을 향유할 수 있습니다. 하지만 일반적인 RDS(MySQL, PostgreSQL ...)를 사용할 경우 부하 분산 책임은 AWS가 아닌 응용 계층에 지워집니다. 이 글은 단일 DB 엔드포인트를 사용할 수 없어 응용에서 직접 엔드포인트를 분기 선택할 경우, Spring Cloud AWS JDBC 모듈을 사례로 들어 RDS의 Read Repli..
[스프링MVC] javax.servlet.http.Part가 파일을 받지 못할 때
Part 인자 바인딩이 안 먹는 경우 스프링 5.3.2 버전 이상을 권장합니다. 이 버전에서 Part 바인딩 관련 이슈가 해결되었음: MockPart in request is not recieved in RequestPart in controller · Issue #26501 · spring-projects/spring-framework Affects version: 5.3.3 Related to: #26261 I have a controller method that accepts multipart/form-data requests with 2 parameters: a file and a @RequestPart String label. Previously in my tests I wa... github...
[스프링MVC] MultipartFile말고 Part로 파일 업로드 - 주의사항 있음
이전 글: [스프링MVC] 파일 업로드 이야기 - multipart/form-data 요청 다루기 MultipartFile 말고 Part 써보기 서블릿 3.0 부터 javax.servlet.http.Part 를 통해 파일 업로드를 처리할 수 있게 되었습니다. 하지만 스프링 5.1.8을 사용하는 중에 이 친구가 제대로 동작하는 걸 보지 못 했는데요. 연관 이슈 MockPart in request is not recieved in RequestPart in controller · Issue #26501 · spring-projects/spring-framework Affects version: 5.3.3 Related to: #26261 I have a controller method that accepts..
[스프링 Web] RestTemplate이 쏘는 패킷을 보고싶다 - Fiddler4로 JVM 패킷 디버깅하기
Fiddler4 프록시 Fiddler4 프록시 소개 단말에서 송수신하는 HTTP(S) 패킷을 조회하는 데스크톱 응용입니다. 흔히 보는 브라우저 개발자 툴, 네트워크 분석 도구과 흡사합니다. 차이점은 해당 데스크탑을 포워드 프록시 서버로 만들어 준다는 점입니다. FIddler4를 켜면 기본적으로 8888번 포트로 프록시 서버가 실행됩니다. 내 스마트폰의 네트워크 설정에서 본인 데스크탑을 프록시로 지정하면, 폰을 오고가는 HTTP(S) 패킷을 디버깅 할 수 있습니다. 이것이 제가 FIddler4를 쓰는 주 사용처입니다. 한 편, 오고 가는 패킷을 인터셉트하여 커스터마이징 하는 기능도 제공하고 있습니다. 엄청 재밌는 기능이에요. 웹 페이지의 i18n을 테스트할 때 리퀘스트의 로케일을 ko-KR에서 ja-JP..
[스프링 Web] 웹 API 호출 이야기 - RestTemplate을 사용하는 서비스 구조와 구현
RestTemplate을 사용하는 서비스 레이어 구조 및 구현 요약 서비스가 비즈니스 객체를 다른 곳에서 획득해 오는 경우가 있다. 그 출처는 DB가 될 수도 있고, 다른 웹 서비스가 되기도 한다. DB와 퍼시스턴스 레이어를 거쳐 객체를 뽑아오든, 웹 API를 호출하여 객체를 얻어오든 두 방식을 구현하는 코드 패턴은 스프링에서 거의 유사하다. 3티어 아키텍쳐로 책임을 나누게 되며. 티어 간 객체 변환이 공통적으로 요구되는 사항이다. 3티어 아키텍처 비교 DB에서 객체를 얻을 때 서비스는 레포지토리 레이어를 통해 DB 데이터에 접근한다. 레포지토리 단은 JPA 구현체 Hibernate 기술 등을 채용하여 ORM(객체-관계형 매핑)을 제공한다. ResultSet에 담긴 관계형 데이터를 자바 엔터티 객체로 변..
[스프링MVC] 어노테이션 이야기 - REST와 @ResponseBody
REST와 @ResponseBody 어노테이션 스프링MVC에서 컨트롤러의 메서드는 "논리적인 뷰"를 반환하는 것으로 상정한다. 하지만 REST 서비스는 리소스를 반환해야하기 때문에 상성이 맞지 않다. 그럴 땐 컨트롤러 메서드에@ResponseBody 붙여준다. @ResponseBody를 붙인 메서드의 반환은, 뷰가 되는 것이 아니며 즉시 HTTP 응답 스트림으로 사용된다. 반환된 값은 디스패쳐 서블릿에 등록된 메시지 컨버터 빈을 거쳐 JSON 및 XML로 변환되고 HTTP 응답 스트림에 쓰인다. @Controller @ResquestMapping(value="/singer") public class SingerController { final Logger logger = LoggerFactory.getL..