Stay Hungry Stay Foolish

전체 글 430

[스프링] 프로필(Profile)이란?

ProfileSpring Boot에서 프로필은 실행 환경을 구분하기 위한 태그 같은 개념이다. 대표적으로 개발(dev)/테스트(test)/운영(prod) 환경마다 DB 접속 정보, 로깅 레벨, 외부 API 키, 캐시 및 보안 설정 등이 달라지는데, 코드를 건드리지 않고 설정 파일만 바꿔 끼울 수 있게 해 주는 기능이다. 프로필용 설정 파일("프로필 파일") 구조파일 이름when load역할application.properties 또는 .yml항상 로드되는 공통 설정JPA, Flyway 같은 공통 옵션application-dev.propertiesdev 프로필이 활성화됐을 때만H2 메모리 DB, 디버그 로그application-prod.ymlprod 프로필이 활성화됐을 때만MySQL 접속 정보, 로깅 최소..

자바/스프링 2025.07.08

[스프링] @RequestParam 어노테이션

@RequestParamHTTP 요청에서 전달된 "파라미터 값"을 컨트롤러 메서드의 매개변수로 바인딩해주는 어노테이션이다.쉽게 말하면, 클라이언트가 요청할 때 URL이나 폼에 같이 보낸 값을 변수로 받아주는 역할이다. 🔍 예제 1: GET 요청에서 사용📌 요청 URLGET /greet?name=홍길동 📌 컨트롤러@GetMapping("/greet")public String greet(@RequestParam String name) { return "안녕하세요, " + name + "님!";}?name=홍길동 → @RequestParam String name으로 전달결과 : "안녕하세요, 홍길동님!" 🔍 예제 2: POST 폼 데이터에서 사용📌 HTML 폼 로그인 📌 컨트롤러..

자바/스프링 2025.07.03

[스프링] 요청 매핑 어노테이션

요청 매핑이란?요청(request)은 클라이언트(브라우저, 앱 등)가 서버로 보내는 메시지다. 예를 들어,GET /helloPOST /login이런 요청을 어떤 메서드가 처리할지 연결(매핑) 해주는 것이 바로 요청 매핑(Request Mapping)이다. 동작 방식@GetMapping("/hello")public String sayHello() { return "Hello!";}클라이언트가 GET /hello 요청을 보낸다.스프링은 "/hello"를 처리할 수 있는 메서드를 찾는다.sayHello() 메서드가 매핑되어 있으니까, 이 메서드가 실행된다.반환값으로 "Hello!"가 응답으로 돌아간다. 📌 주요 요청 매핑 어노테이션들어노테이션의미@RequestMapping범용 요청 매핑(GET, PO..

자바/스프링 2025.07.03

[스프링] @ResponseBody, ResponseEntity

@ResponseBody이 어노테이션은 리턴값을 HTTP 응답 바디에 직접 넣겠다는 의미이다. 사용 예시@Controller@ResponseBodypublic class MyController { @GetMapping("/hello") public String hello() { return "Hello, world!"; }} @Controller만 사용한 경우@Controllerpublic class MyController { @GetMapping("/hello") public String hello() { return "hello"; // → templates/hello.html 같은 뷰를 찾음 }}스프링은 리턴값을 뷰(View)의 이름으로 처..

자바/스프링 2025.07.03

[스프링] 2025-07-02

📁 file.upload-dir=uploads/ 의미 이 설정은 파일 업로드를 위한 저장 경로를 지정하는 사용자 정의 프로퍼티이다. 🛠️ 사용 예시 📍 application.propertiesfile.upload-dir=uploads/file.upload-dir은 Spring Boot에서 직접 제공하는 공식 키는 아니고, 개발자가 커스텀해서 사용하는 키이다.uploads/는 프로젝트 루트 또는 지정된 경로 기준으로 파일을 저장할 디렉토리 경로이다. (상대 경로) 📍 Java 코드 (예: @Value 사용)@Value("${file.upload-dir}")private String uploadDir;Java 코드에서 @Value로 주입받아 파일 저장 경로로 사용한다. 📍 파일 저장 로직 P..

TIL 2025.07.02

[스프링] application.properties 파일

application.propertiesSpring Boot에서 설정 정보를 저장하는 파일이다. 주로 다음과 같은 설정들을 포함한다. ✅ 기본 구조키=값모든 설정은 키=값 형식으로 작성되며, Spring Boot가 이 키를 기준으로 자동 설정한다. 📌 자주 사용하는 설정 예시1. 서버 설정server.port=8083 # 서버 포트 번호 설정 (기본값은 8080)server.servlet.context-path=/api # API의 기본 경로 설정 2. 데이터베이스 설정spring.datasource.url=jdbc:mysql://localhost:3306/mydbspring.datasource.username=rootspring.datasource.password=1234spring.data..

자바/스프링 2025.07.02

[H2 DB] 완전 삭제 후 재설치 방법(Spring Boot 프로젝트 하면서 생긴 문제)

🔥 H2 데이터베이스 완전 삭제 방법✅ Uninstall.exe 실행✅ 남은 파일 삭제 (C:\Program Files\H2\, jpashop.mv.db 등)✅ 환경 변수에서 H2 관련 경로 삭제✅ 레지스트리 정리 (Windows 한정)✅ PC 재부팅 후 H2 최신 버전 다운로드 & 재설치✅ http://localhost:8082 접속하여 정상 작동 확인1️⃣ H2 제거 (Uninstall.exe 실행)C:\Program Files\H2\ 또는 C:\H2\로 이동Uninstall.exe 실행삭제가 완료되면 PC를 재부팅 (필수는 아님)※ Program Files에 없으면 Program Files(x86) 폴더에서 찾아보면 된다. ※ 나는 Unistall 후 H2 폴더를 삭제하려고 하는데 안 돼서 재부팅..

TIL 2025.02.04

프로젝트 환경설정

1. Spring Initializr 를 통해 프로젝트 설정아래와 같이 프로젝트를 미리 설정하고 Generate를 클릭해 파일을 다운받아 인텔리제이에서 불러온다.  2. 파일 열기 맨 처음 파일을 불러올 때 build.gradle을 클릭해서 불러온다. 파일을 처음 열면 로딩이 길다. 라이브러리를 모두 다운받아야 하기 때문에 시간이 오래 걸린다.  3. build.gradle build.gradle 파일에서 내가 원하는 대로 파일이 설정돼 있는지 확인한다. plugins { id 'java' id 'org.springframework.boot' version '3.4.0' id 'io.spring.dependency-management' version '1.1.6'}group = 'jpabook'versi..

웹 애플리케이션 개발 시작

start : 2024-12-02 진행 순서1. 프로젝트 환경설정2. 도메인 모델과 테이블 설계3. 애플리케이션 기능 구현 목차1. 프로젝트 환경설정Spring BootJPAGradleThymeleaftHIBERNATETomcat2. 요구사항 분석회원 기능, 상품 기능, 주문 기능의 요구사항을 분석3. 도메인과 테이블 설계분석한 요구사항을 토대로 도메인 모델을 설계 엔티티 설계테이블 설계엔티티와 테이블을 ORM으로 매핑4. 아키텍처 구성애플리케이션 아키텍처를 간단하게 구성 5. 핵심 비즈니스 로직 개발(회원, 상품, 주문)회원, 상품, 주문 도메인 개발핵심 비즈니스 로직 개발6. 테스트테스트 케이스 검증도메인 주도 설계 이해7. 웹 계층 개발앱 기반 위에 웹 계층을 올림 뷰 컨트롤러와 뷰 템플릿을 올려서..

[BOJ] 1303. 전쟁 - 전투 (Python/그래프탐색/Silver 1)

[문제 링크] 👉 https://www.acmicpc.net/problem/1303풀이 방법💡 DFS, BFS 이용 📌 주의할 점가로, 세로 확인하가Solutionfrom collections import dequedx = [1, 0, -1, 0]dy = [0, -1, 0, 1]N, M = map(int, input().split())war = [input().strip() for _ in range(M)]visited = [[0] * N for _ in range(M)]W, B = 0, 0def dfs(i, j, color): cnt = 1 visited[i][j] = 1 queue = deque() queue.append((i, j)) while queue: ..

[Programmers] L1. 카드 뭉치 (Python)

[문제 링크] 👇  프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡Queue 이용cards1와 cards2를 각각 큐처럼 사용하여, 앞에서부터 단어를 꺼냄goal 배열의 각 단어에 대해해당 단어가 cards1의 맨 앞에 있다면 cards1에서 제거그렇지 않고 cards2의 맨 앞에 있다면 cards2에서 제거두 곳 모두에 없다면 "No"를 반환모든 단어를 성공적으로 처리했다면 "Yes"를 반환Solutionfrom collections import dequedef solution(cards1, cards2, goal): answer = "Yes" cards1 = deque(car..

[Programmers] L1. 추억 점수 (Python)

[문제 링크] 👇  프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법photo 에서 한 행씩 꺼내고, 해당 행의 열을 하나씩 꺼내서 이름 리스트에 이름이 있는 경우 점수에 누적시킨다.한 행을 다 돌았으면 점수를 결과 리스트에 추가한다. Solutiondef solution(name, yearning, photo): answer = [] for i in photo: score = 0 for j in i: if j in name: # 해당 이름이 있는 경우 score += yearning[name.index(j)] ..

[Algorithm] 최소 힙(Min Heap)

최소 힙 최소 힙(Min Heap)은 이진 트리 형태의 자료구조로, 부모 노드의 값이 항상 자식 노드의 값보다 작거나 같은 특성을 갖는 구조이다. O(logn)의 시간 복잡도로 삽입/삭제 가능작은 값을 효율적으로 관리 가능특정 값 삭제, 임의 인덱스 접근이 비효율적. O(n)이 소요됨특징부모 ≤ 자식모든 부모 노드의 값은 자식 노드의 값보다 작거나 같다.가장 작은 값이 루트 노드에 위치.완전 이진 트리트리의 모든 레벨이 꽉 차 있으며, 마지막 레벨은 왼쪽부터 채워져야 함.활용최소 힙은 최솟값을 효율적으로 찾거나 관리해야 하는 상황에서 유용하다.우선순위 큐 구현정렬되지 않은 데이터에서 최솟값 추출데이터 스트림에서 k번째 작은 값 유지 연산삽입 O(log⁡n) 새 데이터를 트리의 가장 아래(왼쪽부터 채움)에..

알고리즘 2024.11.16

[Programmers] L1. 명예의 전당 (최소 힙/Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법1️⃣ 명예의 전당 유지명예의 전당은 k 개의 점수를 유지하며, kkk개를 초과하면 가장 낮은 점수를 제거우선순위 큐(최소 힙)를 활용하면 효율적으로 관리 가능2️⃣ 최하위 점수 추출매번 명예의 전당에서 최하위 점수를 확인하여 기록3️⃣ 점수 처리점수를 하나씩 추가하며 명예의 전당을 업데이트명예의 전당이 가득 차면 최저 점수와 비교 후 대체Solution최소 힙 구현import heapqdef solution(k, score): hall_of_fame = [] # 명예의 전당 (최소 힙) result = [] f..