본문 바로가기

Spring12

백엔드, 프론트 서버를 연결할 때: 'CORS' 문제 및 해결법 나는 백엔드를 spring 프레임워크로, 프론트를 react 프레임워크로 개발을 할 때 가장 처음 직면한 문제가 있었다. 그것은 바로 'CORS' 문제였다. 아마 대부분의 개발자들이 프론트 담당이든 백엔드 담당이든 개발을 하면서 무조건 적으로 직면하였을 문제이다. 이 글에서는 CORS에 대해 간단하게 설명하고 어떻게 해결하는지를 작성할 것이다. 이를 해결하는 법은 다양하게 있지만 내가 사용하는 방식만을 작성할 것이니 다른 방법이 궁금하다면 다른 글들을 참고해 보길 바란다. CORS 란 교차 출처 리소스 공유(Cross-Origin Resource Sharing)란 서버가 웹 브라우저에서 리소스를 로드할 때 다른 오리진을 통해 로드하지 못하게 하는 HTTP 헤더 기반 메커니즘이다. 프론트엔드 서버를 만들어.. 2023. 3. 20.
AWS RDS를 통한 관계형 데이터베이스 구축 및 springboot 연동 들어가기 프로젝트를 진행함에 있어서 가장 중요한 것 중 하나는 데이터베이스이다. 간단히 로컬에서 프로젝트를 진행할 때는 h2를 사용하였고 배포까지 진행할 때는 배포서버 내부에 mariaDB를 설치하여 데이터를 삽입하였다. 그렇다면 aws 프리티어를 사용하고 있을 때는 어떻게할까? 프리티어로 진행한 서버는 내부 용량이 적기 때문에 데이터베이스 크기도 작을 수 밖에 없고 한눈에 데이터들을 파악하기도 힘들다. 그리고 배포 서버에 문제가 생기면 데이터베이스에 접근할 수 없다는 문제도 있다. 이럴때 유용한 것이 aws rds이다. aws rds는 aws에서 rds 전용 서버를 제공을 해주는 서비스이다. 즉, 배포서버에서 데이터를 rds 서버로 저장을 시켜서 데이터를 굳이 배포서버에 저장할 필요가 없어진다. 배포서.. 2023. 2. 22.
스프링부트 - 인터셉터(Interceptor) 스프링 프로젝트를 진행하다 보면 controller에 접근전 공통적으로 처리해야 하는 로직이 있었을 것이다. controller로 이동하기 전에 로그인 정보를 확인한다든지, 보안토큰, 불필요한 파라미터나 파일 등을 전송 중인지 미리 확인하면 좋은데 이러한 상황에서 사용하는 것이 필터와 인터셉터이다. 필터와 인터셉터는 비슷한 기능을 하지만 차이가 존재한다. 아래 사진을 봐보자. 위 사진과 같이 스프링 프로젝트에서 요청이 와서 스프링 MVC를 사용하고 DispatcherServlet에 앞에서 처리를 하면 필터이고 뒤에서 처리하면 인터셉터이다. 아래는 좀 더 필터와 인터셉터의 구체적인 부분들이다.(출처: https://velog.io/@ansalstmd/%EC%8A%A4%ED%94%84%EB%A7%81%EB%.. 2022. 3. 6.
스프링부트 AOP에 대한 기본 정리 스프링의 여러 장점이 되는 특징들이 있고 그중 하나이 AOP에 대해 간단히 정리해 보고자 한다. 좋은 개발환경의 중요 원칙은 '개발자가 비즈니스 로직에만 집중할 수 있게 한다'이다. 대부분의 시스템이 공통으로 가지고 있는 보안, 로그 , 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는 '횡단 관심사(cross-concern)'라고 한다. AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임이다. AOP(Aspect-Oriented Programming)는 '관점 지향 프로그래밍'이라는 의미이고 '관점(Aspect)'이라는 용어는 개발자들에게는 '관심사(concern)'라는 말로 통용된다. 관심사는 핵심 로직은 아니지만, 코드를 온전하기 위해 필요한 것들이.. 2022. 2. 28.
스프링부트 MyBatis를 이용하여 MySQL 연동 및 동적쿼리 개발자들은 데이터 베이스에 데이터를 유지하기 위해 JDBC를 이용하여 데이터베이스에 접근하였다. JDBC의 복잡함을 단순하게 하게 위해 Persistence FrameWork를 사용했는데 ORM 프레임워크와 SQL 매퍼이다. ORM 프레임워크는 SQL 코드를 직접 작성하지 않고 자바에서 객체지향적인 방식으로 데이터를 객체로 다루면 이를 관계형 데이터베이스에서 작업할 때 SQL로 변환하여 연동을 할 수 있도록 하는 것이다. 즉 SQL을 직접 작성할 필요가 없는 것이다. 데이터베이스에 종속성이 약해서 바뀌더라도 바로바로 적용 가능하다. 대표적으로는 Hibernate가 있고 이에 대한 표준 기술 명세가 JPA이다. MyBatis는 ORM 프레임워크라고 말하지는 않고 SQL 매퍼라고 한다. 객체와 관계형 데이터.. 2022. 2. 25.
Spring Controller를 REST 방식으로 변화 처음 spring을 공부하고 JSP를 이용하여 프로젝트를 진행했을 때 @Controller를 이용하여 요청이 오면 jsp페이지를 보여주는 방식으로 프로젝트를 진행하였었다. 하지만 이는 옛날 방식이며 요즘 자주 사용하는 방식은 @RestController을 이용한다고 한다. 모바일 시대가 되면서 서버의 데이터를 소비하는 주체가 '브라우저'라는 특정한 애플리케이션에서 앱이나 웹이 서버에서 제공하는 데이터를 소비하게 되었다. 즉, 과거에는 브라우저라는 하나의 대상만을 상대로 HTML이라는 형태만 전달하면 됐었고, 이러한 방식이 @Controller을 이용한 방식이다. 하지만 웹이나 앱은 자신만의 방식으로 화면을 보여주게 되므로 하나의 HTML을 전달하는 방식은 좋은 방식이 아닐 것이다. 앱이나 웹은 각자의 맞.. 2022. 2. 23.
스프링 MVC에 대한 간단 정리 스프링 프레임워크로 웹 개발을 하면서 많이 본 용어는 스프링 MVC라는 용어이다. 스프링 프로젝트를 생성할 때 spring web라는 라이브러리를 추가했었는데 spring mvc를 사용할 수 있도록 하는 것이라고 한다. 그저 프로젝트를 생성할 때 자동으로 쓰는 것이었지만 도대체 이 spring mvc라는 것은 무엇인지 확실히 알아보고자 한다. 이 글에서는 '코드로 배우는 웹 프로젝트 - 구멍가게 코딩단'을 읽고 스프링 MVC에 대해 간단하게 정리하여 쓴 글이다. 우선 가장 기억해야 할 점은 스프링 MVC가 스프링의 서브 프로젝트라는 점이다. 스프링은 하나의 기능을 위해서만 만들어진 프레임워크가 아니라 '코어'라고 할 수 있는 프레임워크에 여러 서브 프로젝트를 결합해서 다양한 상황에 대처할 수 있도록 개발.. 2022. 2. 9.
JPA 양방향 연관관계 일 때의 저장 및 연관관계 편의 메서드 연관관계를 일대다, 다대일로 데이터를 다루는 경우가 많다. 만약 한 엔티티에서만 일대다, 다대일을 설정하면 단방향 연관관계이고 두 엔티티 모두 다대일, 일대다 설정을 한다면 양방향 연관관계이다. 양방향 연관관계를 할 때 외래 키 설정이 제대로 안된 경우가 있을 수 있는데 아래의 간단한 예시 코드를 보며 살펴보자. @Entity class Member { ... @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; ... } @Entity class Team { ... @OneToMany(mappedBy = "team") private List members = new ArrayList(); ... } 위와 같이 Member 과 Team은 다대일 관계이며 .. 2021. 12. 14.
스프링 @ExceptionHandler 를 통한 예외 처리 스프링으로 프로젝트를 진행하다 보면 정해진 입력값이 잘못되거나 없거나 하는 등 다양한 예외들이 발생할 것이다. 아래와 같이 흔히 JPA로 데이터를 가져올 때도 findById를 사용할 때 잘못될 경우를 대비하여 exception을 던질 것이다. User user = userRepository.findById(user.getId()) .orElseThrow(() -> new IllegalStateException( "userId가 " + user.getId() + "인 user를 찾지 못했습니다.")); 그렇다면 위에 코드처럼 findById를 통해 데이터를 가져오려고 했지만 예외가 발생했을 때에는 클라이언트한테는 어떻게 표시될까? 뭐라고 하는지도 모를 이상한 에러가 보여질 것이다. 그렇기에 이러한 예외들.. 2021. 10. 2.