전체 글 212

AWS S3 활용한 파일 및 이미지 업로드

S3란 무엇인가?S3는 AWS에서 제공하는 '클라우드 스토리지 서비스'이다. 쉽게 말하면 AWS에서 제공하는 파일 저장 서비스이다. S3의 사용 용도이미지나 동영상 저장 및 제공정적 웹사이트 호스팅CDN(CloudFront)과 연계해 빠른 콘텐츠 제공백업 및 복원용 스토리지백엔드 서버를 개발하다 보면 이미지나 동영상 업로드 기능을 구현해야 할때가 있다. 이때 사용자가 업로드 한 이미지를 S3에 저장하여 편리하게 사용 가능하다. 현업에서도 파일 업로드 기능을 구현할때 AWS S3를 많이 활용한다고 해서 공부하게 되었다.  그렇다면 어떠한 과정을 통해 S3를 활용할 수 있을까?  사용자가 API를 통해 이미지나 동영상 업로드 요청S3에 파일이 업로드S3에서 파일이 저장된 URL을 리턴DB에 파일 URL을 저..

Deployment/AWS 2025.03.18

추상 메서드, 추상 클래스, 익명 내부 클래스[Java]

추상 메서드란 메서드의 선언만 있고 구현이 없는 메서드를 말한다. 즉, 구체적인 동작이 정의되지 않은 메서드로, 반드시 추상 클래스(abstract class) 또는 인터페이스(interface)에서만 선언할 수 있다. 그리고 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 한다.  간단한 예제를 통해서 알아보자. 추상 메서드 추상 클래스를 이용하지 않았을때 @Slf4jpublic class TemplateMethodTest { @Test void templateMethodV0(){ logic1(); logic2(); } private void logic1(){ long startTime = Sys..

자바 2025.03.12

프로그래머스 - 주식가격[Java]

https://school.programmers.co.kr/learn/courses/30/lessons/42584 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 알고리즘 고득점 Kit에 스택/큐로 분류 되어있어서 계속 고민하다가 스택큐가 아닌 배열로 풀 수 있을 것 같아서 배열로 풀어봤다. prices 배열을 순회하면서 현재 위치 뒤의 요소들과 크기를 비교하여, 주식 가격이 유지되는 시간을 결정하고time 변수를 큐에 저장하고 answer 배열로 이동시켜서 출력했다. ※주의할 점현재 위치의 다음 위치에서 바로 주식 가격이 떨어져도 1초 동안 가격이 유지 된것으로 간주한다! 즉 반목문을 작성할때 가격의 ..

프로그래머스 - 다리를 지나는 트럭[Java]

https://school.programmers.co.kr/learn/courses/30/lessons/42583?language=java 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 처음에는 문제 이해가 어려웠지만 몇가지 규칙만 이해하고 큐를 사용하면 쉽게 해결 가능한 문제이다. 다리에 트럭이 한대도 없는 경우 : 트럭을 큐에 추가트럭이 다리에 꽉 찬경우 : 트럭을 큐에서 삭제다리에 트럭이 꽉 차지 않은 경우 : 트럭을 큐에 추가하거나 트럭을 앞으로 이동시킴단, 주의 할 점은 마지막 트럭이 내릴때의 시간까지 구하기 위해  return 값은 time + bridge_length로 해줘서 정확한 결과를..

EC2를 활용한 SpringBoot 프로젝트 배포[2]

https://developerwoohyeon.tistory.com/218 EC2를 활용한 SpringBoot 프로젝트 배포[1]프로젝트를 배포할때 흔히 사용하는게 바로 AWS의 EC2이다. 그렇다면 EC2는 무엇일까? 만약 내 컴퓨터로 서버를 배포하여 모든 사람들이 사용할 수 있도록 하려면 내 컴퓨터를 24시간 동안 켜놔야developerwoohyeon.tistory.com     이제 EC2 인스턴스와 연결하여 SpringBoot 프로젝트를 배포해보자.    우측 상단의 연결 버튼을 누르면 Ubuntu 환경의 터미널이 화면에 나온다.  Ubuntu 환경에서 JDK 설치 $ sudo apt update && /sudo apt install openjdk-17-jdk -y JDK를 설치할때 꼭 자신의 깃..

Deployment/AWS 2025.03.05

EC2를 활용한 SpringBoot 프로젝트 배포[1]

프로젝트를 배포할때 흔히 사용하는게 바로 AWS의 EC2이다. 그렇다면 EC2는 무엇일까? 만약 내 컴퓨터로 서버를 배포하여 모든 사람들이 사용할 수 있도록 하려면 내 컴퓨터를 24시간 동안 켜놔야 할것이다.또한 인터넷을 통해 내 컴퓨터에 접근할 수 있게 해야하므로 보안적으로도 문제가 될수있다. 하지만 이러한 단점을 AWS EC2를 이용하여 극복할 수 있다.  🎯 EC2는 컴퓨터를 빌려서 원격으로 접속해 사용하는 서비스이다. 즉 EC2를 사용한다는 것은 하나의 컴퓨터를 빌려 사용한다는 것과 같고, EC2를 이용해 배포를 한다는 것은 빌린 컴퓨터를 이용해 서버를 배포한다는 것과 같다! 이렇게 되면 내 컴퓨터를 24시간 켜놔야 할일도 없고,  AWS  EC2에서 제공하는 여러 부가기능(로깅,오토케일링,로드..

Deployment/AWS 2025.03.05

동시성 문제를 해결하기 위한 ThreadLocal[java]

자바에서 스레드를 고려하지 않고 동시에 요청을 보내면 동시성 문제를 겪어서 심각한 오류를 경험할 수 있다. 간단한 로그 추적기 예제를 통해 알아보자.  package hello.advanced.app.v3;import hello.advanced.trace.TraceId;import hello.advanced.trace.TraceStatus;import hello.advanced.trace.hellotrace.HelloTraceV2;import hello.advanced.trace.logtrace.LogTrace;import lombok.RequiredArgsConstructor;import org.springframework.stereotype.Repository;@Repository@RequiredAr..

자바 2025.03.05

Thread란 무엇인가[Java]

Thread란하나의 프로세스 내에서 실행되는 흐름의 단위를 말한다.  일반적으로 자바 애플리케이션을 만들어 실행하면 1개의 메인 쓰레드에 의해 프로그램이 실행된다. 하지만 1개의 쓰레드 만으로는 동시에 여러 작업을 할 수 없다. 동시에 여러 작업을 처리하고 싶다면, 별도의 쓰레드를 만들어 실행시켜줘야 하는데, 자바는 멀티 스레드 기반으로 동시성 프로그래밍을 지원하기 위한 방법을 계속 발전시켜 왔다.  Thread 클래스 Thread 클래스는 자바에서 기본적으로 제공하는 스레드 클래스이며, 이를 상속하면 새로운 스레드를 만들 수 있다. Thread 클래스를 상속받아 run() 메서드를 오버라이딩하여 실행시킬 코드를 정의한다. class MyThread extends Thread { @Override ..

자바 2025.03.02

@Controller와 @RestController의 차이점

스프링 MVC에서 빠질 수 없는 애노테이션이 바로 @Controller이다. @Controller는 주로 HTML과 같은 뷰를 렌더링 할때 사용된다. @Controllerpublic class MyController { @RequestMapping("/greeting") public String greeting(Model model) { model.addAttribute("message", "Hello, World!"); return "greeting"; // greeting.jsp 또는 greeting.html과 같이 뷰를 찾아 렌더링 } }  하지만 뷰를 렌더링하는것 이 아닌 Data(또는 객체)를 반환해야 하는 경우도 존재한다. 이럴때는 @Respons..

BackEnd/spring 2025.02.23

프로그래머스 - 전력망을 둘로 나누기[Java][BFS]

https://school.programmers.co.kr/learn/courses/30/lessons/86971 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 두개의 연결성분으로 나눠서 두 연경성분의 개수의 구해야 하는 문제이다. 정답을 구하기 위해서 각 연결들을 하나씩 자르면서 그때의 정답을 구해가며 최소값을 구해야 한다.  import java.util.*;class Solution { int[][] arr; public int solution(int n, int[][] wires) { int answer = n; arr = new int[n+1][n+1]; ..