programming
![[pre-project] React에서 Bearer 토큰을 헤더로 받아오기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFQ1sJ%2FbtrLr2S52TY%2FsM8CNKRpqBQHjRVLTuau0K%2Fimg.jpg)
[pre-project] React에서 Bearer 토큰을 헤더로 받아오기
Bearer 토큰을 사용해서 시큐리티를 적용시켰는데 postman을 통해서는 토큰을 잘 받아왔지만 리액트 쪽에서 받아오지 못하는 이슈가 있었다. 크롬 개발자 도구에서 보면 이상하게 Authorization이 보이질 않았다. 하지만 포스트맨에서는 아무 문제없이 Authorization부분을 헤더에서 확인할 수 있었다. 이를 미루어볼때, 토큰 자체가 생성되지 않는 이유는 아닌 것 같았다. 프론트엔드 측에서 별다른 해결책이 보이지 않아서 백엔드 측에서 문제가 있는게 아닐까 하고 검색을 해본 결과 서버측에서 시도할만한 방법은 바로 addExposedHeader라는 녀석을 추가하는 것. 우리는 cors를 webconfig에서 시큐리티 필터 체인에다가 corsFilter를 사용하는 방식으로 변경했기에 해당 코드를 ..
![[pre-project] RDS연동 후 프로그램 실행 시 프리징](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcwf2e6%2FbtrLuCzmKok%2FGiU3F53nrrUyPzuKKxv9wK%2Fimg.jpg)
[pre-project] RDS연동 후 프로그램 실행 시 프리징
ddl 옵션 create로 해놨는데 실행 때마다 alter table answer에서 멈추는 것 같았다. answer 엔티티 클래스에서 외래 키들의 입력이 들어오지 않아 나는 에러 같아서 @NoArgsConstructor를 붙여주니 그 뒤로는 잘 되었다. 근데 @Entity가 있으면 자동으로 noargs생성자가 된다는데.. 뭐지 ---수정 위에 것도 문제긴 했었지만 그게 먹통 현상의 근본적인 문제가 아니었다. 상단에 첨부한 사진에는 Deadlock 관련 이슈가 있었는데 이것은 pool 사이즈를 늘려보래서 늘려봤지만 같은 문제가 발생했다. DB Navigator로 확인한 모습인데 저 에러는 아래에서 설명할 에러때문에 일어나는 일 같다. 결론부터 말하면 가장 큰 이유는 바로 엔티티 안의 외래 키 때문이었는데..
![[EC2] Nginx를 이용한 React 배포](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEKWAn%2FbtrLkwezwBY%2Fk4cE2VnebhYKQwsdRDFHN1%2Fimg.jpg)
[EC2] Nginx를 이용한 React 배포
Pre-Project 도중 Vercel 같은 배포 툴을 사용해서 프론트단을 배포하려 했으나 도메인을 강제로 https로 변경시키는 바람에 다른 방식으로 배포를 할지, 스프링에 https를 적용할지 고민이 되었다. 처음에는 certbot을 통해서 https를 적용해보려 했으나 Vercel 같은 경우에는 배포를 자동으로 해주면서 도메인도 https로 생성을 해버리기 때문에 certbot에서 https를 적용할 수 없었다. (http도메인에 https를 적용하는 방식인 듯) 그리고 이 방식은 잘 이해가 되지 않았다. 그래서 React배포 시 자주 사용된다는 Nginx를 사용해서 React 프로젝트를 배포하기로 했다. 아쉽지만 이번에는 http로 진행하기로 정했다. 아래의 블로그가 큰 도움이 되었다. Nginx..
[pre-project] React 에서 Spring Boot 서버로 접속 불가 - CORS
Pre-Project도중 FE에서 BE 서버로 접속이 가능한지 확인하기 위해 굴러다니는 아무 프로젝트를 IntelliJ를 통해 돌리고, 내 아이피 주소:8080으로 접속이 가능한지 테스트를 해보았다. FE 측에서 CORS에러가 떠서 접속이 안된다고 하셔서 React에서 proxy를 8080으로 줘 보는 등 이런저런 시도를 해보았지만 잘 되지 않았다. 계속 찾아보던 도중 BE측에서 CORS 설정을 할 수 있다는 것을 찾게 되고 적용을 해봤더니 그 이후로는 통신이 잘 되었다. [해결방법] - global하게 적용 1. src/main/java/{프로젝트폴더}에 config 디렉토리를 만든다. 2. config안에 WebConfig클래스를 만들고 @Configuration과 WebMvcConfigurer를 구..

docker 개념
docker Application을 구동하는데 필요한 모든 것들을 docker Container안에 넣은 다음에 어떤 환경에서든 구애받지 않고 애플리케이션을 실행할 수 있도록 해 준다. 이렇게 컨테이너 형식으로 애플리케이션을 관리할 때 다음과 같은 이점들이 있다. 의존성 충돌 문제를 해결한다 개발 및 배포 환경의 일치화 수평적인 확장과 새로운 내용의 배포를 쉽게 해준다 ex) kubernetes의 orchestration tool 큰 흐름으로 보자면 dockerfile 생성 및 build >> 이미지를 만든다 >> 컨테이너를 만든다 >> 배포하고 >> 구동한다 docker의 구성요소 도커를 구성하기 위해서는 3가지의 요소가 필요하다. Dockerfile 애플리케이션을 구동하는데 필요한 정보들 [ 환경변수..
싱글톤 사용시 주의사항
싱글톤 패턴 싱글톤 패턴은 클래스의 인스턴스가 딱 1개만 생성되는 '디자인 패턴'이다. 인스턴스가 딱 1개만 있어야 하기 때문에 'private'를 사용해서 외부에서 new사용을 막아야 함. 이미 만들어진 녀석(객체)을 활용하기 때문에 요청 시마다 인스턴스를 새로 만드는 것에 비해 효율적이다. 하지만, 다음과 같은 단점들도 있다. 구현 코드가 길다 클라이언트가 구체 클래스에 의존한다 = DIP를 위반한다 = OCP원칙 위반 가능성이 높다. private 생성자로 하위 클래스 생성이 어렵다 테스트가 어렵다 내부 속성의 변경 및 초기화가 어렵다 안티패턴으로 불리기도 한다. 결론적으로 유연성에 있어서 불리하다. 싱글톤 컨테이너 위의 싱글톤 패턴의 단점을 보완하기 위해 '싱글톤 컨테이너'라는 것을 사용함. 싱글..

Spring MVC
Spring MVC - Spring의 모듈중 웹 계층을 담당하는 모듈 중 하나. (웹 프레임워크의 한 종류) - 서블릿(Servlet)API를 기반으로 클라이언트의 요청을 처리하는 모듈 서블릿(Servlet) 클라의 요청을 처리하도록 특정 규약에 맞춰 Java파일로 작성하는 클래스 파일 (아파치 톰캣 -> 이런 서블릿들이 웹 application으로 실행하게 해주는 서블릿 컨테이너) >> 클라이언트의 요청을 편리하게 처리해줌 MODEL 클라가 요청한 작업을 처리하고 응답으로 돌려준다. 이때 응답으로 돌려주는 작업의 처리결과 : Model 클라의 요청을 구체적으로 처리하는 영역을 서비스 계층 (Service Layer) 실제 요청을 처리하기 위해 Java코드로 구현한 것을 비즈니스 로직(Business L..
![[Spring Security] - 필터에 대한 개념](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMKyZL%2FbtrGg00CHuO%2F0nxZVNgQ1TCES2lro7amm1%2Fimg.jpg)
[Spring Security] - 필터에 대한 개념
Spring Security? Spring Security는 간단한 형태의 Servlet Filter를 통해서 자바 웹 애플리케이션에 대한 인증과 권한 (Authentication & Authorization)을 제공하는 Spring의 보안 Framework이다. Spring Security의 큰 특징으로는 각각의 역할에 맞는 필터를 체인으로 구축하여 순서에 따라 실행된다는 점이다. 그리고 모든 Request는 반드시 이 필터 체인을 거쳐야 한다. 그리고 이 필터를 개발자가 선택하여 필요에 맞게 커스터마이징 할 수 있다. 아래의 SecurityConfig 클래스 내부의 SecurityFilterChain 메서드 안에서 ( . )으로 이어지는 부분이 필터의 체인을 구현하고 있는 모습이다. import or..

Spring Data JDBC 간략 요약
Spring Data JDBC란? Spring Data JDBC는 객체 중심 기술(Object-Relational Mapping / ORM)중 하나로 같은 ORM 기술로는 JPA(Java Persistence API)가 있다. SQL중심 기술: [mybatis], [Spring JDBC] ORM중심 기술: [JPA], [Spring Data JPA], [Spring Data JDBC] ORM은 DB에 접근하기 위해 JDBC API처럼 SQL 쿼리문을 직접 작성하는 방식보다는 DB의 테이블에 데이터를 저장하거나 조회할 때, 자바의 객체(Object)를 이용해 Application 내부에서 이 객체를 SQL 쿼리문으로 자동 변환하고 DB 테이블에 접근한다. 실제로는 Spring Data JDBC는 상대적으로..

JDBC 간단 요약
JDBC란? JDBC (Java Database Connectivity)는 자바 기반 Application코드 레벨에서 사용되는 데이터를 DB에 저장 / 업데이트하거나, DB의 데이터를 자바 코드레 벨에서 사용하게 해주는 Java에서 제공하는 표준 API이다. JDBC의 구체적인 API 사용법은 알 필요가 딱히 없지만 동작 흐름을 알고 있으면 Spring에서 지원하는 데이터 액세스 기술을 사용하는 데 있어 유용하다. 후에 학습하게 될 Spring Data JDBC나 Spring Data JPA 기술들은 내부적으로 JDBC를 이용한다. JDBC 전체 동작 흐름 JDBC API 사용을 위해서는 JDBC 드라이버라는 것을 먼저 로딩한 후에 DB와 연결하게 된다. DB와의 통신을 담당하는 인터페이스이다. Ora..

예외 처리
왜 쓰는가 유효성 검증에 실패했을 때 단순히 404 같은 에러를 띄우게 된다면 어느 부분에서 왜 틀린 건지 제대로 알 수가 없다. 따라서 클라이언트 측에서 좀 더 구체적으로 에러 메시지의 확인을 할 수 있도록 예외처리를 통해 메시지를 전달한다. 문제가 발생하면 예외를 던진다 예외를 잡아서 가공하고 클라이언트에 깔끔한 메시지로 돌려준다 @ExceptionHandler Controller 단계에서 @ExceptionHandler를 이용해 예외처리를 할 수 있다. Controller내부의 핸들러 메서드에서 예외가 발생했을 때 해당 예외를 @ExceptionHandler 예외 처리 메서드에서 호출하게 된다. @PostMapping public ResponseEntity postMember(@Valid @Requ..

Entity개념 복습
*해당 포스팅은 개인적인 공부를 정리한 것이므로 틀린 정보가 있을 수 있습니다* *틀린 부분에 대한 피드백은 감사하게 받겠습니다* 스터디 책을 진행하다가 Entity라는 것이 자꾸 튀어나왔는데, 분명 초반 부분에서 한번 스쳐 지나갔다. 하지만 개념이 이해가 되지 않은 상태에서 일단 코드를 따라 쳐 보다 보니 이미 나온 내용이지만 어떤 기능을 하는지 잘 와닿지 않았고 계속 찝찝한 기분이 들었다. 따라서 스터디 발표도 할 겸 한번 간단하게나마 정리해보려 한다. 추가할 것: JPA Repository에서 진행되가는 과정 - @entity로 객체 만들고 persist() 메서드로 실제로 DB와 연동을 시킨다. 빈 과 엔티티 차이?? entity의 위치 큰 그림으로 봤을때 알아두면 좋을 사전 정보는 아래와 같다 ..