Data Fetcher란? Data Fetcher은 Graphql의 쿼리에 해당하는 데이터를 반환하는 역할을 한다. Data Fetcher을 만들기 위해서 메서드에 @DgsData, @DgsQuery, @DgsMutation, @DgsSubscription 어노테이션을 사용한다. 그리고 Data Fetcher 메서드들은 @DgsComponent가 붙은 클래스 안에 위치해야 한다. @DgsData DgsData는 parentType, field 이렇게 2개의 파라미터를 받을 수 있다. parentType: 필드가 포함된 부모 타입 field: data fetcher가 반환할 쿼리의 필드 위 스키마에 대해서 아래와 같은 data fetcher을 작성할 수 있다. @DgsComponent public clas..
DGS Framework란? GraphQL은 API용 쿼리 언어이다. GraphQL을 사용하면 사용자가 원하는 데이터만을 가져올 수 있기 때문에 오버페칭(사용 하지 않는 데이터까지 가져오는 것)을 방지할 수 있다. DGS Framework는 스프링에서 graphql을 더 편리하게 사용하기 위해 넷플릭스에서 만든 SpringBoot 기반의 서버 프레임워크이다 dependency 추가 공식 문서를 보면 gradle 사용을 추천한다. DSG를 스프링에서 사용하기 위해서 아래와 같은 dependency를 추가해줘야 한다. implementation(platform("com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:latest.release")) implem..
영화 api를 구현하면서 영화의 정보와 함께 영화 포스터 이미지를 저장했다. 파일 업로드를 구현하고 저장하고 테스트한 것을 기록한다. MultipartFile HTTP에서 클라이언트가 파일과 데이터를 HTTP 서버로 보내기 위해서는 멀티파트 요청을 사용한다. 스프링에는 멀티파트 요청을 처리하기 위한 MultipartFile 인터페이스가 존재한다. 멀티파트 요청에서 수신된 업로드 파일의 표현이고 파일 내용은 메모리 혹은 일시적으로 디스크에 저장된다. 임시 저장소이기 때문에 요청이 끝나면 파일 내용이 지워진다. 따라서 파일 내용을 다른 저장소에 저장을해야 한다. 이 MultipartFile 인터페이스를 사용해서 파일 업로드를 처리하면 된다. Controller public record RequestCreat..
이 글은 단순히 생각 정리를 위한 글이지 정답을 위한 글이 아닙니다! 최근 Spring api를 개발하고 코드 리뷰를 받았다. DTO 변환 관련하여 코드 리뷰에서 피드백을 받았고 이에 대해서 기록하는 글이다. @Entity @Table(name = "post") public class Post { public PostDto toPostDto() { return new PostDto(id, title, content, createAt, user.getId()); } } 위의 코드들은 피드백을 받았던 문제의 그 코드(일부만 가져 왔다!)이다! Entity는 데이터베이스의 테이블과 매핑되는 클래스이고, DTO는 계층간의 데이터 전달을 위해 사용하는 객체이다. Entity의 값을 통해서 DTO 객체를 생성할 때..
마이크로서비스 아키텍처에서 각 기능은 독립적인 소프트웨어 컴포넌트로 개발된다. 그리고 각 컴포넌트는 자체 데이터 저장소가 있고 다른 컴포넌트와는 명확한 API를 통하여 통신한다. Java와 스프링 프레임워크로 개발된 컴포넌트는 WAR 파일로 패키징되어 apache tomcat과 같은 웹 컨테이너에 배포된다. 이 글은 이런 마이크로 서비스에 대해서 자세하게 정리한 글이다. 독립 소프트웨어 컴포넌트의 장점 컴포넌트를 개별적으로 배포 및 업그레이드 가능 API를 통하여 기존 시스템과 통합 가능 기능의 일부를 기존의 기능으로 대체 가능 다른 컴포넌트와 상관 없이 여러 서버로 scale-out 가능 수직 스케일링의 한계 수직 스케일링(vertical scaling)이란? scale-up과 같은 말. 서버의 성능 ..
Before 마이크로서비스 마이크로서비스 전에는, 웹 애플리케이션은 monolithic architecture 형태였다. 이런 구조의 애플리케이션은 단일 소프트웨어로 산출된다. 이런 형태는 애플리케이션이 커지고 복잡해질 때 문제가 발생한다. 이런 애플리케이션은 변경이 있을 때, 애플리케이션 전체를 다시 빌드-테스트-배포 과정을 거치면서, 발생하는 비용이 증가한다. 이런 문제를 해결하기 위해 마이크로서비스가 고안되었다. 마이크로서비스의 등장 마이크로서비스는 일체형 애플리케이션을 작은 독립된 컴포넌트로 나누는 것이다. 이런 마이크로서비스는 나누어졌기 때문에 분산되었고, 독립된 컴포넌트이기 때문에 느슨한 결합을 가진다. 대형 애플리케이션에서 마이크로서비스를 사용하면 관리가 쉬워진다. 마이크로서비스는 위와 같은..
application.properties에 DB 설정을 하고 실행을 했는데 Exception이 발생했다. SQLNonTransientConnectionException을 검색한 방법으로 고쳐지지 않아, Public Key Retrieval is not allowed를 검색하니까 해결방법을 찾을 수 있었다. allowPublicKeyRetrieval=true 위의 문장을 추가해 주면 해결할 수 있는 Exception이었다. MySQL 8.0이상부터는 위의 문장을 추가해 주어야 한다. mysql -V로 mysql의 버전을 확인해 보니 8.0.28이었다. 위의 이미지는 application.properties를 캡처한 것이다. 보면 맨 뒤에 allowPublicKeyRetrieval=true을 추가해 주었다...
인증과 인가 인증은 유저가 누구인지 확인하는 것이다. 로그인을 통해서 사용자가 누구인지 알 수 있다. 인가는 유저가 사용 가능한 자원을 정의하는 것이다. 로그인을 한 후 사용자는 이메일을 사용할 수 있다. 기본적인 인증 기본 인증은 다음과 같은 두 가지 절차를 거친다. 1. 아이디와 비밀번호를 인코딩하여 서버에 전송한다 2. 서버는 아이디와 비밀번호를 디코딩한 후, 사용자 정보가 저장된 데이터 베이스 혹은 인증 서버에서 아이디와 비밀번호를 비교한다. 위의 절차는 문제가 있다. 첫 번째로 디코더가 있다면 중간자 공격(MITM)을 통해 아이디와 비밀번호를 확인할 수 있어, 아이디와 비밀번호가 유출될 수 있다. HTTP 프로토콜을 사용할 수 없고, HTTPS를 사용해야 한다. 두 번째로 인증 서버와 인증 DB..
CORS Cross-Origin Resource Sharing의 약자 리소스를 제공한 도메인이 현재 요청하려는 도메인과 다르더라도 요청을 허락해 주는 웹 보안 방침 위키피디아: 웹 페이지 상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있게 허용하는 구조 mozilla: 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제 쉽게 말하자면 도메인(웹 서비스에서 컴퓨터를 식별하는 호스트명)이 다르더라도 리소스에 접근할 수 있게 하는 것이다. 프론트엔드의 주소가 localhost:3000이고 백엔드 주소가 localhost:8080일 때 프론트엔드에서 요청을 보낸다고 ..
throw와 throws 모두 예외 처리와 관련된 키워드이다. 이 두 키워드는 사용하는 상황에서 차이가 난다. throw throw는 예외를 발생시킬 때 사용한다. 만약, 이름을 입력을 받았을 때 문자열에 아무것도 입력이 되지 않았을 때를 생각해보자. if (name.length == 0) throw RuntimeException("Name is empty."); 위와 같이 이름의 길이를 검사하고, 길이가 0인 경우 예외를 발생시키면 된다. throws private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); private static final BufferedWriter bw = new Bu..
- Total
- Today
- Yesterday
- pm.test
- 1차 인터뷰
- 주생성자
- github
- python3
- Squash and merge
- pm.expect
- postman tests
- 코딩테스트
- solidity
- postman collection
- 확장 함수
- java
- hashcode
- postman
- 코틀린
- downTo
- Kotlin In Action
- go 특징
- Basic Type
- string
- DGS Framework
- Kotlin
- 네이버 2022 공채
- mysql
- 2차 인터뷰
- git
- squash merge
- graphql
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |