Backend Dev
-
[Spring] 리액트(React) - 스프링(Spring) 연동 시 발생하는 CORS 이슈 해결하기Backend Dev/Spring Framework 2023. 3. 5. 15:59
웹 개발 팀 프로젝트를 진행하다 퍼블리싱과 API 개발을 마친 뒤 프론트엔드 쪽에서 API 테스트 도중 다음과 같은 CORS 에러가 발생하였다. "Access to XmlHttpRequest at A from origin B has been blocked by CORS policy : Response to preflight requeset doesn't pass access control check: No "Access-Control-Allow-Origin" header is persent on the requested resource" 이는 자바스크립트에서 서로 다른 도메인 소스에 대해 ajax 요청 API 호출 시 웹 브라우저가 하나의 서버 연결만 허용하도록 설정되어 있기에 발생하는 에러이다. COR..
-
AWS CodeDeploy Agent 설치 오류 해결 방법Backend Dev/CI, CD 2023. 1. 12. 20:59
AWS EC2에 접속하여 프로젝트를 배포하기 위해 CodeDeploy Agent를 설치해야 하는데 이에 사용되는 명령어는 아래와 같다. $ wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install $ chmod +x ./install $ sudo ./install auto 권한 변경 후 install 파일을 다운 받던 중 다음과 같은 에러가 발생할 수 있다. /usr/bin/env: ruby: No such file or directory 해당 에러는 ruby라는 언어를 설치하지 않았을 때에 발생하는 문제이므로 EC2 인스턴스에 ruby를 설치하는 명령어를 수행하였다. # $ sudo apt-get install ruby $ s..
-
[Spring] JPA vs JDBCBackend Dev/Spring Framework 2022. 12. 20. 17:39
JPA(Java Persistence API)란? 자바 진영의 ORM(객체 관계 매핑) 기술에 대한 API 표준으로 SQL 중심적인 개발의 문제점을 해결해주기 위해 나온 기술이다. SQL 중심적으로 개발을 했을 경우의 문제점 무한 반복, 지루한 코드 직접 작성 (CRUD) SQL에 의존적인 개발 (필드 추가시 직접 SQL 수정, 객체와 SQL간 변환) 패러다임의 불일치 특히, 패러다임의 불일치는 객체와 관계형 데이터베이스의 차이에서 영향을 미쳐 객체 지향 프로그래밍에 맞지 않는 문제가 생기는데 상속, 연관관계, 데이터 타입, 데이터 식별 방법에서 차이가 생긴다. 상속 -> 객체 상속 관계와 테이블의 슈퍼타입, 서브타입 관계에서 주키, 외래키 관리 차이 연관관계 -> 객체는 참조를 사용하며 테이블은 외래 ..
-
[Spring] 빈 생명주기 콜백Backend Dev/Spring Framework 2022. 3. 19. 14:15
DB 커넥션 풀이나 네트워크 소켓처럼 앱 시작 시점에 필요한 연결을 미리 해두고, 앱 종료 시점에 연결을 모두 종료하는 작업을 진행하기 위해서 객체의 초기화와 종료 작업이 필요하다. 가상의 외부 네트워크에 연결한다고 하였을 때 연결을 맺고 끊을 수 있는 클라이언트가 있다고 가정해보자. public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메시지"); } public void setUrl(String url) { this.url = url; } //서비스 시작시 호출 public void connect() {..
-
[Spring] 동일 타입 빈 조회Backend Dev/Spring Framework 2022. 3. 16. 18:34
@Autowired는 타입으로 빈을 조회하는데 동일 타입에서 선택된 빈이 2개 이상일 때 문제가 발생한다. 이는 스프링 빈을 수동 등록으로도 문제 해결이 가능하지만 의존 관계 자동 주입으로 해결하는 방법이 있다. @Autowired : 필드 명 매칭 @Autowired는 처음에 타입 매칭을 시도하고 동일 타입에 여러 빈이 있을 경우 필드 이름이나 파라미터 이름으로 빈 이름을 추가 매칭한다. 필드명 매칭은 먼저 타입 매칭을 시도 후 그 결과에 여러 빈이 있을 때 추가로 동작하는 기능이다. // 기존 코드 @Autowired private DiscountPolicy discountPolicy // 필드명을 빈 이름으로 변경 @Autowired private DiscountPolicy rateDiscountP..
-
[Spring] 의존 관계 주입의 다양한 방식Backend Dev/Spring Framework 2022. 3. 16. 03:09
의존관계 자동 주입은 스프링 컨테이너가 관리하는 스프링 빈이어야만 동작한다. 생성자 주입 생성자를 통해서 의존관계를 주입받는 방법 생성자 호출시점에 딱 1번만 호출되는 것이 보장되며 "불변, 필수" 의존관계에 사용된다. 단, 클래스 내 생성자가 "1개만" 있는 경우 @Autowired를 생략해도 스프링 빈 의존관계가 자동 주입된다. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy public OrderServiceImpl(MemberRepository memberRepo..
-
[Spring] 컴포넌트 스캔과 의존관계 자동 주입Backend Dev/Spring Framework 2022. 3. 15. 17:00
컴포넌트 스캔 스프링 빈 등록 시 @Bean 또는 XML의 을 통해 설정 정보에 등록할 스프링 빈을 직접 나열하고, 의존 관계도 직접 명시했으나 등록해야 할 빈이 많아진다면 등록하는데 시간도 들뿐더러 실수의 가능성이 높아질 것이다. 스프링에서는 수동 구성(설정) 정보가 없어도 자동으로 스프링 빈을 등록해주는 @ComponentScan과 의존 관계도 자동으로 주입해주는 @Autowired 기능을 제공한다. @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { } @ComponentScan 을 구성 정..
-
[Spring] 싱글톤 컨테이너Backend Dev/Spring Framework 2022. 3. 8. 21:49
웹 애플리케이션과 싱글톤 스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생했으며 대부분 스프링 애플리케이션은 웹 애플리케이션이다. 이러한 웹 앱은 보통 여러 클라이언트가 동시에 요청을한다. 순수 자바 코드로 구현된 DI 컨테이너(AppConfig)의 경우 클라이언트에서 요청을 할 때마다 아래와 같이 객체를 새로 생성하여 서로 다른 참조값을 갖기에 메모리 낭비가 심한 문제가 있다. 이는 해당 객체가 딱 1개만 생성(같은 참조값)되고, 공유하도록 설계하면 되는데 이를 싱글톤 패턴이라 한다. public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new ..