🛠️Backend/Spring21 [Spring Boot] Spring Boot & React 프로젝트 연결하기 개요이전에 만들었던 서버를 화면과 함께 배포해야 되는 상황이 발생했다. 서버는 Spring Boot를 사용했고 화면은 React를 사용했다. 두 프로젝트를 합쳐서 배포한 작업을 기록으로 남긴다. 리액트 프로젝트 추가 및 폴더 위치Spring Boot 프로젝트 내에서 리액트 프로젝트 폴더의 위치는 다음과 같다. 기존 서버 프로젝트의 main 폴더 아래에 넣어주었다. 만약 기존에 생성했던 리액트 프로젝트가 없다면 터미널에서 해당 위치에 리액트 프로젝트를 생성해주면 된다. Proxy 설정CrossOrigin 에러를 방지하기 위해 리액트 프로젝트에서 Proxy를 설정해준다. 필자의 경우 서버에서 CrossOrigin 에러 처리를 하고 있었어서 리액트에서 따로 proxy 설정은 하지않았다. 만약 필요하다면 다.. 🛠️Backend/Spring 2024. 10. 30. [Spring Boot] redirect 처리 (feat. RestTemplate, HttpServletRequest, @RequestBody) 개요이전에 만들었던 프로젝트의 API path를 변경해야 하는 상황이 발생했다. 하지만 이미 배포를 진행한 프로젝트였기 때문에 기존의 path가 호출되더라도 동일한 응답을 줘야만 했다. 작성했던 Service의 로직을 그대로 호출하는 방법도 있지만 동일한 코드를 호출하는 것은 비효율적이라고 생각했다. 따라서 redirect로 호출된 path의 마지막 부분과 동일한 API를 호출하는 코드를 작성하기로 했다. RestTemplate"redirect:/path" 로 변경된 path 를 호출하는 방법도 있지만 성능 저하 및 코드의 복잡성 증가 이슈가 있었다. 그래서 RestTemplate 라이브러리를 사용해서 직접 API를 호출하는 방법을 택했다. RestTemplate는 Spring Boot 2.4 버전 이.. 🛠️Backend/Spring 2024. 10. 22. [Spring Boot] 설정 파일 값 암호화 및 적용하기 (feat. Jasypt) 개요프로그램을 개발한 후 프로젝트를 외부에 배포하기 위해 회사 내부 정보를 암호화해야 했다. 우선 가장 대중적이고 래퍼런스가 많은 Jasypt 라이브러리를 사용해 DB 접속 정보를 암호화하기로 했다. 의존성 추가라이브러리https://github.com/ulisesbocchio/jasypt-spring-boot GitHub - ulisesbocchio/jasypt-spring-boot: Jasypt integration for Spring bootJasypt integration for Spring boot. Contribute to ulisesbocchio/jasypt-spring-boot development by creating an account on GitHub.github.com Gradle.. 🛠️Backend/Spring 2024. 6. 25. [Spring Boot] 프로젝트 실행 시 파일 존재 여부 확인 및 신규 파일 생성 파일 존재 확인FileApplication.java@Slf4j@SpringBootApplicationpublic class FileApplication { public static void main(String[] args) { // '파일.확장자'로 파일을 생성한다. String fileName = "파일.확장자"; // 파일이 존재하지 않는다면 파일을 생성한다. if( !CreateFile.fileExists(fileName) ) { log.error("[error] 'fileName' 파일이 존재하지 않습니다."); CreateFile.createFile(fileName); .. 🛠️Backend/Spring 2024. 3. 6. [Spring Boot] Launch4j과 jar 파일을 사용해서 실행 파일(.exe) 만들기 Launch4j 다운로드https://sourceforge.net/projects/launch4j/files/launch4j-3/3.50/ Launch4j Executable Wrapper - Browse /launch4j-3/3.50 at SourceForge.netSpamTitan Email Security and Protection SpamTitan blocks spam, viruses, malware, ransomware, phishing attempts and other email threats.sourceforge.net 파일 생성 경로 지정 및 jar 파일 등록 톱니바퀴를 눌렀을 때 Specify output file with .exe extension 경고 메시지가 뜨는 경우가 있다. O.. 🛠️Backend/Spring 2024. 3. 6. [Spring Boot] jar 파일 실행 시 외부 폴더 이미지 찾아서 내려주기 폴더 구조 생성jar파일이 있는 폴더 아래에 이미지를 저장할 폴더를 생성해준다. 생성한 img 폴더 안에 원하는 이미지 파일을 넣어주면 된다. 폴더 안의 파일을 불러온 후 화면에 출력해주는 코드를 작성한다. 코드 작성@Slf4j@RestController@CrossOrigin@RequiredArgsConstructorpublic class ImageController { @GetMapping("img/**") public ResponseEntity getInternalImage(HttpServletRequest request) throws IOException { log.info("[ImageController - GET, /img/**]"); // 이미지 파일 풀네.. 🛠️Backend/Spring 2024. 2. 15. [Spring Boot] 단위 테스트 성공 시 Spring Rest Docs 파일 생성 API 문서화 프로젝트를 진행하다 보면 다른 업체와 협업을 하거나 프로젝트 정보를 공유하는 경우가 생기게 된다. 많은 API를 모두 설명할 수 없어서 보통은 API 문서를 사용해서 통신에 필요한 정보를 제공하곤 한다. API 문서화 도구를 사용하지 않고도 직접 html 파일로 작성하거나 다른 프로그램으로 작성할 수 있다. 하지만 그렇게 되면 개발과 문서 작업 둘 다 병행해야하기 때문에 많은 시간과 인력을 낭비하게 된다. 그리고 수작업으로 진행하다보면 내용을 빼먹는 경우도 생기게 된다. 그렇기 때문에 대부분 API 문서화 도구 사용을 추천한다. Swagger vs Spring REST Docs 많이 사용하는 API 문서화 도구로는 Swagger와 Spring Rest Docs가 있다. Swagger 장점 .. 🛠️Backend/Spring 2024. 1. 2. [Spring Boot] 단위 테스트 코드 작성 (JUnit 5) Unit 테스트 Java에서 지원하는 JUnit 프레임워크를 이용해 단위 테스트를 실시하는 것을 Unit 테스트라고 한다. @Test 어노테이션이 붙은 함수 및 메소드를 테스트하는 것이다. Spring에서 단위 테스트를 하는 것은 Spring 컨테이너에 올라간 Bean들을 테스트하는 것이다. 단위 테스트를 하는 이유는 작성이 간편해 빠르게 테스트가 가능하고, 불필요한 리소스를 낭비하지 않을 수 있다. JUnit5 어노테이션 @Test JUnit은 각각의 테스트가 서로 영향을 주지 않고 독립적으로 실행되는 것을 원칙으로 한다. 따라서 테스트(메소드)마다 객체를 별도로 생성한다. JUnit4에서는 메소드의 접근제한자를 public으로 선언해야 사용할 수 있었다. JUnit5로 넘어온 후 접근제한자가 Defa.. 🛠️Backend/Spring 2024. 1. 2. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 13 EC2 서비스 시작하기 EC2란? AWS에서 제공하는 성능,용량 등을 유동적으로 사용할 수 있는 서버다. 보통 AWS에서 '리눅스 서버 혹은 윈도우 서버를 사용합니다'라고 하면 EC2를 이야기하는 것이다. EC2란 이름은 Elastic Compute Cloud에서 C가 2개 있어서 C2라는 이름이 붙었다. AWS에서는 대부분 첫 글자가 중복되면 숫자로 표기한다. 비슷한 예로 AWS의 S3는 Simple Storage Service를 줄여 S가 3개라고 하여 S3이다. AWS에서 무료로 제공하는 프리티어 플랜에서는 EC2 사용에 아래와 같은 제한이 있다. 사양이 t2.micro만 가능하다. vCPU(가상 CPU) 1 Core, 메모리 1GB 사양이다. 보통 vCPU는 물리 CPU 사양의 절반 정도의 성능을.. 🛠️Backend/Spring 2023. 6. 17. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 12 AWS 회원가입 및 EC2 서버 설정 AWS(Amajon Web Service)라는 클라우드 서비스를 이용해 본격적으로 서버 배포를 진행하겠다. 외부에서 본인이 만든 서비스에 접근하려면 24시간 작동하는 서버가 필수이다. 24시간 작동하는 서버에는 3가지 선택지가 있다. 집에 PC를 24시간 구동시킨다. 호스팅 서비스(Cafe 24, 코리아 호스팅 등)을 이용한다. 클라우드 서비스(AWS, AZURE, GCP 등)을 이용한다. 일반적으로 비용은 호스팅 서비스나 집 PC를 이용하는 것이 저렴하다. 만약 특정 시간에만 트래픽이 몰린다면 유동적으로 사양을 늘릴 수 있는 클라우드가 유리하다. 클라우드란? 단순히 물리 장비를 대여하는 것이 아니고, 쉽게 말하면 인터넷(클라우드)을 통해 서버, 스토리지(파일 저장소.. 🛠️Backend/Spring 2023. 3. 19. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 11 어노테이션 기반으로 개선하기 같은 코드가 반복되는 부분은 일반적인 프로그래밍에서 개선이 필요한 나쁜 코드 중 하나이다. 같은 코드를 계속해서 복사 & 붙여넣기로 반복하게 만든다면 이후에 수정이 필요한 경우 모든 부분을 하나씩 찾아가며 수정해야만 한다. 이렇게 될 경우 유지보수성이 떨어질 수 밖에 없으며 혹시나 수정이 반영되지 않은 코드가 있다면 문제가 발생할 수 밖에 없다. 지금까지 작성한 코드 중에서 개선할만한 것은 무엇이 있을까? 책의 저자는 IndexController에서 세션값을 찾아오는 아래의 코드라고 생각한다. SessionUser user = (SessionUser) httpSession.getAttribute("user"); index 메소드 외에 다른 Controller와 Method에서.. 🛠️Backend/Spring 2023. 1. 21. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 10 Application-oauth 등록 이전에 만들었던 application.properties가 있는 src/main/resources/ 디렉토리에 application-oauth.properties 파일을 생성한다. 생성한 파일에 아래와 클라이언트 ID와 클라이언트 보안 비밀코드를 아래와 같이 등록한다. spring.security.oauth2.client.registration.google.client-id=클라이언트 ID spring.security.oauth2.client.registration.google.client-secret=클라이언트 보안 비밀 코드 spring.security.oauth2.client.registration.google.scope=profile,email scope=pr.. 🛠️Backend/Spring 2023. 1. 20. 이전 1 2 다음