Stay Hungry Stay Foolish

TIL 32

[TIL] 2026년 01월 07일

ORM 매핑이 필요한 이유객체와 관계형 데이터베이스가 관계를 표현하는 방식의 근본적인 차이가 있습니다. 객체는 서로 다른 객체를 '참조'하며 관계를 맺습니다. 반면에 테이블은 '외래 키' 값을 통해 다른 테이블의 데이터를 연결하죠. 이 차이 때문에 ORM 매핑이 필요합니다. 🚀 메모리(객체) ↔ 저장소(테이블) 관계에서 JPA가 중간(영속성 컨텍스트)에서 무엇을 하는지핵심: 코드에서는 객체 참조로 관계를 만들고, JPA가 그걸 DB의 FK로 바꿔서 저장한다. 1) 엔티티(객체) 쪽 코드: "객체 참조"로 관계 표현@Entity@Table(name = "TEAM")public class Team { @Id @GeneratedValue private Long id; private Stri..

TIL 2026.01.07

[TIL] 2026년 01월 05일

JPA 매핑 정보는 XML이나 어노테이션 중에 선택해서 기술하면 된다. 그럼 XML은 무엇일까? XMLXML(eXtensible Markup Language)은 데이터를 구조화하고 저장하며 전송하기 위한 확장 가능한 마크업 언어로, HTML과 비슷하지만 미리 정의된 태그 없이 사용자가 직접 태그를 정의하여 데이터의 의미와 구조를 설명한다. 사용 방식JPA에서 XML로 매핑을 쓰는 방식은 표준적으로 orm.xml(JPA ORM 매핑 파일) 을 두고, 이를 스프링 부트/JPA 설정에 “매핑 리소스”로 등록하는 형태이다. (즉, 어노테이션 대신 또는 어노테이션을 “덮어쓰는” 용도로 XML을 쓴다.) 1) orm.xml 파일을 어디에 두나요? 가장 흔한 기본 위치는 아래입니다.src/main/resources..

TIL 2026.01.05

[스프링] 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

[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

[TIL] 2024년 11월 14일

파이썬TypeError: slice indices must be integers or None or have an __index__ method타입이 맞지 않아서 발생한 에러이다. 다음은 위 에러가 난 코드이다. N = info[0]for i in info[1:N:2]: ...현재 N은 str 형이다. 그래서 slice 를 사용하려고 할 때 에러가 난 것이다.슬라이싱 할 때는 int 타입만 넣을 수 있다. 해결 방법N = int(info[0])int 형으로 변환하면 에러가 나지 않는다.📜 작성한 게시글[SWEA 코딩테스트 3260. 두 수의 덧셈] 👉 https://dev-cloud.tistory.com/409 [SWEA 코딩테스트 4047. 영준이의 카드 카운팅] 👉 https://dev-clou..

TIL 2024.11.15

[TIL] 2024년 11월 11일

파이썬단어 중복 체크 시 시간복잡도 list vs set 자료구조리스트에서의 in 연산은 O(n)의 시간이 소요되고, set 자료구조는 O(1)의 시간이 소요된다. 따라서 중복 체크 시 set를 사용하여 코드를 작성하는 것이 더 효율적이다.  📜 작성한 게시글[Programmers 코딩테스트 L2. 짝지어 제거하기] 👉 https://dev-cloud.tistory.com/398 [Programmers 코딩테스트 L2. 카펫] 👉 https://dev-cloud.tistory.com/399 [Programmers 코딩테스트 L1. 푸드 파이트 대회] 👉 https://dev-cloud.tistory.com/400 [Programmers 코딩테스트 L2. 점프와 순간 이동] 👉 https://de..

TIL 2024.11.12

[TIL] 2024년 11월 10일

파이썬n 개의 배열을 만들고자 할 때 안 되는 예시fibo = []*n fibo = []*n는 리스트를 만들지만, 이 방식은 n개의 배열을 만들지 않는다. 실제로는 빈 리스트에 n을 곱한 결과로, 빈 리스트가 유지된다.  💡 n개의 빈 요소 리스트를 만들고 싶다면  1️⃣ None을 포함한 길이 n의 리스트를 생성fibo = [None] * nprint(fibo) # 출력: [None, None, None, None, None]  2️⃣ 특정 값으로 초기화된 길이 n의 리스트 생성fibo = [0] * nprint(fibo) # 출력: [0, 0, 0, 0, 0]  피보나치 수 1️⃣ 1234567로 나누는 이유값의 크기 제한피보나치 수는 순서가 커질수록 매우 빠르게 증가하기 때문에, 큰 숫자를 계..

TIL 2024.11.11

[TIL] 2024년 11월 09일

파이썬이진법 변환 방법 1️⃣ bin() 함수 사용bin() 함수는 숫자를 2진법 문자열로 변환하여 반환n = 5binary_str = bin(n) # 결과: '0b101' 2️⃣ format() 함수 사용format() 함수의 'b' 포맷 코드를 사용하여 2진법 문자열을 얻을 수 있다.n = 5binary_str = format(n, 'b') # 결과: '101' 3️⃣ f-string을 사용한 포맷팅f-string 안에서도 :b를 붙여서 2진법으로 출력할 수 있다.n = 5binary_str = f"{n:b}" # 결과: '101' 4️⃣ bin() 함수 + 슬라이싱bin() 함수의 결과에서 접두사 '0b'를 제거하기 위해 슬라이싱을 사용할 수 있다.n = 5binary_str = bin(n)[..

TIL 2024.11.10

[TIL] 2024년 11월 08일

파이썬리스트, 큐, 스택이 비어있는지 확인하는 방법 1️⃣ 방법 1if stack: # 스택이 비어있지 않으면  2️⃣ 방법 2if len(stack) == 0: 간단하게 방법 1을 쓰도록 하자.  배열끼리 최대 최소를 비교할 때만일 배열 두 개를 비교하여 min() 함수를 사용했을 때 무슨 기준으로 결과를 반환하는지 확인하자. min(A, B)는 A와 B를 사전순(lexicographical)으로 비교하여 첫 번째로 사전순으로 작은 리스트를 반환한다. 여기서 사전순 비교는 두 리스트의 각 요소를 앞에서부터 순차적으로 비교하며, 첫 번째로 다른 값이 나타나는 위치에서 더 작은 값을 가진 리스트가 "작다"고 판별된다.A = [1, 4, 2]B = [5, 4, 4]print(min(A, B)) # [1,..

TIL 2024.11.09

[TIL] 2024년 11월 07일

파이썬코드 비교 1️⃣ 컴프리헨션 사용def correct(student_answer, answers): return sum(1 for i, ans in enumerate(answers) if ans == student_answer[i % len(student_answer)])sum(1 for ...)에서 1은 각 조건이 True일 때 더할 값이다.sum 함수는 조건에 맞는 모든 1 값을 합산하므로, 결과적으로 += 1과 같은 효과를 낸다. 2️⃣ 컴프리헤션 사용 Xdef correct(student_answer, answers): count = 0 for i, ans in enumerate(answers): if ans == student_answer[i % len(stud..

TIL 2024.11.07

[TIL] 2024년 11월 06일

파이썬리스트에 다차원 요소가 들어있을 때 sort list.sort()나 sorted()를 사용할 때는 기본적으로 각 튜플의 첫 번째 요소부터 차례대로 비교하여 정렬한다. 즉, 다차원 요소가 들어 있는 리스트에서 정렬 기준이 명시되지 않으면 튜플의 첫 번째 요소부터 비교하고, 첫 번째 요소가 동일하면 두 번째 요소, 두 번째 요소도 같으면 세 번째 요소… 이런 방식으로 순차적으로 비교하여 정렬한다.   ★ 예시 : (year, month, day, name) 형태의 리스트 # 학생 리스트가 (year, month, day, name) 형식으로 저장되어 있을 때student_list = [ (2000, 5, 21, "Alice"), (1999, 12, 15, "Bob"), (2000, 5,..

TIL 2024.11.06

[TIL] 2024년 10월 30일

파이썬list.insert() 사용 방법 기본 구문list.insert(i, x)원하는 위치 i 에 앞에 추가할 값 x 를 삽입한다. ★ 예시list = ["A", "C"]list.insert(1, "B")print(list) 출력 결과['A', 'B', 'C']list 에는 "A" 와 "C" 가 있다.list 의 1 번째 인덱스 앞에 에 "B" 를 삽입한다.기존 리스트의 1 번째 인덱스의 값은 "C" 였지만, insert() 연산을 한 결과 "B" 가 "C" 앞에 와서 이제 1 번째 인덱스는 "B"가 된 것을 볼 수 있다.  join() 사용 시 정수 리스트 사용 불가 정수 리스트에 대해 join()을 사용하려고 하면 TypeError가 발생하므로, 문자열로 변환해야 한다.result = origin[..

TIL 2024.10.30

[TIL] 2024년 10월 29일

파이썬deque.rotate()from collections import dequedeque.rotate(n)n 만큼 양방향 큐를 회전시킨다.이때 n 이 음수이면 왼쪽으로 회전시키고, 양수이면 오른쪽으로 회전시킨다. ★ rotate() 예시  1️⃣ 왼쪽으로 1만큼 회전 from collections import dequenum = [1, 2, 3, 4, 5]queue = deque(num)queue.rotate(-1)  결과2 3 4 5 1  2️⃣ 오른쪽으로 1만큼 회전from collections import dequenum = [1, 2, 3, 4, 5]queue = deque(num)queue.rotate(1) 결과5 1 2 3 4  리스트를 unpack 하고 출력하는 방법 - join() 사용..

TIL 2024.10.29

[TIL] 2024년 10월 26일

파이썬리스트를 딕셔너리로 변환하고 키 값 넣기 1️⃣ 1. 반복문 이용num_dict = dict() # 딕셔너리 생성planet_nums = ["ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"]for i in range(10): num_dict[planet_nums[i]] = i  2️⃣ 2. zip() 함수 이용planet_nums = ["ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"]num_dict = dict(zip(planet_nums, range(len(planet_nums))))  list to dict 결과{'ZRO': 0, 'O..

TIL 2024.10.29

[TIL] 2024년 10월 25일

파이썬1️⃣ 리스트의 행과 열을 변환하는 방법 1new_board = [list(i) for i in zip(*board)]  2️⃣ 리스트의 행과 열을 변환하는 방법 2new_board = list(map(list, zip(*board)))  ★ 예시board = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]new_board = [list(i) for i in zip(*board)]for i in new_board: print(i) 출력 결과[1, 4, 7][2, 5, 8][3, 6, 9]  zip()파이썬의 zip() 함수는 여러 이터러블(iterable)(리스트, 튜플 등)을 동시에 순회하면서, 각 이터러블의 동일한 인덱스에 있는 요소들을 튜플로 묶어..

TIL 2024.10.25