전체 글 186

[Spring] Swagger https 설정하기 (springdoc)

api의 도메인이 https 프로토콜을 사용하면서 swagger에서 CORS 오류가 발생하는 문제가 나타났다. 이는 Swagger가 기본적으로 http로 요청을 보내게 설정되어있기 때문이다. 이는 @OpenAPIDefinition 어노테이션으로 수정해주면 된다. ... import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.servers.Server; ... @OpenAPIDefinition(servers = {@Server(url = "/", description = "Default Server URL")}) @SpringBootApplication public class MyApplicati..

[Web Server] 웹 서버란? (웹 서버와 WAS의 차이)

웹 서버란 무엇일까? 우선 웹 서버를 하드웨어 관점과 소프트웨어 관점으로 나누어 보아야한다. 하드웨어 관점 '웹 서버의 소프트웨어'와 웹 사이트의 '컴포넌트 파일'들을 저장하는 컴퓨터 (컴포넌트 파일 : HTML, CSS, JS, 이미지) 웹 서버는 인터넷에 연결되어 웹에 연결된 다른 기기들이 웹 서버의 데이터(컴포넌트 파일들)를 주고 받을 수 있도록 한다. 소프트웨어 관점 웹 사용자가 어떻게 호스트 파일에 접근하는지를 관리 웹 서버는 HTTP 서버 형태로 존재(웹 구현 시)하며, HTTP 서버는 HTTP의 소프트웨어 일부 위 두 가지 관점을 합쳐 보면 웹 서버는 브라우저가 HTTP를 통해 파일을 요청했을 때, 요청이 올바른 웹 서버(하드웨어)에 도달하면, HTTP 서버(소프트웨어)가 요청된 문서를 HT..

[Cloudflare] ec2로 배포한 서버에 무료로 https 설정하는 법 (Mixed Content 에러 해결법)

Mixed Content 에러... 프론트를 https로 배포 후 http로 서버와 통신하려하면 발생하는 문제다. 이 문제를 해결하기 위해서는 백엔드에서 http -> https로 접근할 수 있게 설정을 해줘야한다. 필자는 Spring Boot로 api를 개발하여 AWS EC2에 배포한 상황이였고 https로 설정하기 위해 찾아본 방법 중 간단하고 저렴한 방법에는 아래와 같은 방법들이 있었다. 1. AWS CloudFront 먼저 AWS의 CloudFront를 활용한 방법이다. 클라이언트가 https로 CloudFront와 통신을 하고 CloudFront와 api를 제공하는 주체는 http로 통신하는 것이다. ACM을 사용하면 ssl 인증서를 공짜로 이용할 수 있다. 후술하겠지만 CloudFront는 C..

Infra/Cloudflare 2023.01.25

CDN이란? (What is Content Delivery Network?)

CDN, CDN 자주 들어봤는데 간단하게만 이해하고 명확히 그 개념을 알지 못했다. 이번 포스팅을 통해 CDN에 대해 자세히 알아보도록 하겠다! CDN (Content Delivery Network) CDN은 Content Delivery Network의 준말로 직역하면 콘텐츠를 전달하는 네트워크라는 의미이다. CDN은 웹페이지, 이미지, 동영상 등의 콘텐츠를 서버에서 사용자로 전달한다. 그런데, 그런 것들은 이미 인터넷망을 통해 이미 전달되고 있지 않은가? 그렇다면 CDN은 왜 필요한 것일까? CDN은 왜 필요할까? 분명히 CDN 없이도 서비스들은 동작한다. 먼저 일반적인 클라이언트와 서버의 통신을 생각해보자. 누군가 어떠한 사이트에 접속한다는 건 해당 사이트를 제공하는 서버 컴퓨터에 방문자의 컴퓨터가..

Base/용어 개념 2023.01.25

[Spring] 연관관계를 갖는 엔티티를 DTO로 저장할 때 문제 (클라이언트에서 foreign key인 ID만 사용해서 저장하는 법)

문제의 발단은 이러했다. @Getter @NoArgsConstructor @Entity(name = "question_posts") public class QuestionPosts extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "question_post_id") private Long questionPostId; @ManyToOne @JoinColumn(name = "user_id", nullable = false) private Users user; @ManyToOne @JoinColumn(name = "dept_id", nullable = false) private DeptCl..

Back-End/Spring JPA 2023.01.08

[Spring] Test 중 발생한 Dto의 'Cannot construct instance of...' 에러

위와 같은 에러가 발생했다. 처음에 다른 에러도 나서 Service, Controller 부분 다 찾아보고 디버깅 해봤는데 아래 부분에서 계속 오류가 나고 멈추는 것이었다. 하지만 문제는 역시 에러 코드를 잘 읽어야했다... Dto 부분이 문제였고 이는 기본 생성자가 없기 때문이었다. ObjectMapper가 @RequestBody를 바인딩 할 때 기본 생성자를 사용하기 때문에 그런 것이었다. lombok으로 기본 생성자를 만들어 준 후 해결되었다.

[Spring] @RequestBody 사용 시 boolean 변수 바인딩 에러 (Boolean variable binding error in requestbody annotation)

위 테스트 코드를 작성하던 중 발생한 문제였다. post를 하기 전 requestDto에서는 분명히 isActive라는 변수의 값이 true였으나 post 한 후 isActive의 값이 false로 나오는 것이었다. 다른 변수의 값들은 멀쩡히 잘 나와서 참 이해하기 어려운 버그였다... 코드를 더 살펴보니 dto에는 문제가 없어보였고 repository의 test 코드는 성공했다. 이에 controller단의 버그라 생각하고 디버깅을 진행하였다. 진행해보니 확실히 Controller에서 문제가 있었다. Controller에서 requestDto를 받는 과정에서 값이 위와 같이 바뀌는 것 같았다. 그렇다면 왜 다른 값들은 멀쩡한데 isActive 값만 버그가 나는걸까? https://projectlombo..

[Spring] 스프링 웹 계층 (spring web layer)

● Web Layer - 흔히 사용하는 컨트롤러(@Controller)와 JSP/Freemarker 등의 뷰 템플릿 영역이다. - 이외에도 필터(@Filter), 인터셉터, 컨트롤러 어드바이스(@ControllerAdvice)등 외부 요청과 응답에 대한 전반적인 영역을 이야기한다. ● Service Layer - @Service에 사용되는 서비스 영역이다. - 일반적으로 Controller와 Dao의 중간 영역에서 사용된다. - @Transactional이 사용되어야 하는 영역이기도 하다. ● Repository Layer - Database와 같이 데이터 저장소에 접근하는 영역이다. - Dao(Data Access Object) 영역으로 이해할 수 있다. ● Dtos - Dto(Data Transfer..

세션 vs 토큰 vs 쿠키, JWT란? (인증과 인가의 차이, authentication authorization 차이, 세션과 쿠키의 개념, JWT의 개념)

로그인을 구현한다면 꼭 알아야 할 개념들이다. 이번에 프로젝트를 진행하면서 Next-Auth를 사용해 소셜 로그인을 구현했는데, 이때 공부한 내용들과 실제 프로젝트에서 사용한 인증, 인가 방법에 대해 소개하겠다. 쿠키(Cookie)란? 먼저 쿠키다. 쿠키는 사용자를 기억하기 위해 서버가 사용자의 브라우저에 저장하는 데이터(작은 기록 정보 파일)라고 할 수 있다. 사용자가 사이트에 방문하면, 1. 브라우저는 서버에 요청(request)을 보내고 2. 서버는 응답(response)한다. 이 응답에는 사용자가 찾던 페이지 정보, 데이터뿐만 아니라 브라우저에 저장하고자 하는 쿠키가 있을 수 있다. 이 쿠키를 브라우저에 저장하게 되면, 사용자가 해당 웹 사이트를 방문할 때마다 브라우저가 자동으로 해당 쿠키를 요청..

Base/용어 개념 2022.12.20

[소프트웨어 마에스트로] SW마에스트로 13기 수료 후기 (맡은 역할 / 프로젝트 소개 / 기술적 어려움 극복 사례 / 협업 방식)

오늘인 12월 15일 수료식을 끝으로 소마 생활이 끝났다. 약 8개월(4~5월 예비과정 + 6월~11월 본과정)간의 소마 생활을 모두 마무리 하고 이제 13기 연수생에서 수료생이 되었다. 정말 많은 것을 경험하고 배우며 성장할 수 있는 시간이었다. 모든 것을 적을 순 없겠지만 성장한 부분, 느낀 점등을 정리하고 진행한 프로젝트를 구체적으로 소개해보려고 한다. 팀에서 어떤 역할을 수행했나? 프론트엔드 개발자로 참여했으며 여러가지 일을 도맡아 처리하였다. 웹 프론트엔드 개발 및 크로스 플랫폼 앱 개발 : 웹으로 서비스를 개발하고 이를 웹뷰로 감싸 크로스 플랫폼 앱을 만듦 (+ 로그인 구현) 전문가 및 제휴 기업 컨택 관리 및 인터뷰 진행 : 약 50명의 약사 및 전문의와 20개의 제약사에 직접 전화 혹은 이..

반응형