전체 글 10

가비지 컬렉션

가비지 컬렉션기본개념자바 기준으로, JVM Heap 영역에 동적으로 할당된 메모리 중 더이상 사용하지 않는 영역에 대해서 주기적으로 정리하는 과정을 뜻합니다.SomethingClass1 sc = new SomethingClass1();free(sc)..?쉽게 말해 이런식으로 객체를 생성해두었으면 원래는 개발자가 메모리를 해제하는 과정을 진행해야합니다.그렇지않으면 메모리가 낭비되기 때문이죠. (메모리 누수)c언어에서는 free() 함수로 직접 작성해줬던 기억이 나는데요, 자바에서는 이 과정을 가비지 컬렉터가 대신해줍니다.기본과정 그렇다면 사용하지 않는 객체(쓰레기, Garbage)는 어떻게 판단해야할까요? 단순히 하나하나 검사하기에는 많은 시간이 소요되어 프로그램 성능에 치명적일 것입니다. 그래서 HotS..

개념잡기 2025.07.16

[오늘의 문제] String Constant Pool

public class Main { public static void main(String[] args) { String a = "a"; // String constant pool에 저장됨 String b = "a"; String c = new String("a"); // heap 영역에 저장됨 System.out.println(a == b); System.out.println(b == c); System.out.println(a == c); }}정답은 true, false, false 입니다.왜냐하면 String을 리터럴로 선언할 경우 String pool이라는 곳에서 인스턴스로 관리되고, 이후에 해당 문자열이 있다..

Java 2025.06.21

[Spring Batch] 이모저모

이번에 요양시설 관련한 프로젝트에 참여하게 되어 공공데이터를 다룰 상황이 생겼습니다.예전에 간단히 학습해본 스프링배치를 통해서 파일들을 읽어보면서 학습하려고 합니다.고유하지 않은 고유 ID칼럼정의서에 따르면 첫번째 칼럼은 고유 ID 필드인데, 중복되어있음을 확인했습니다.확인을 해보니, 뒷자리가 1842로 되어야 고유값인데, 갑자기 0002로 초기화된 모습입니다.org.hibernate.exception.ConstraintViolationException: could not execute statement [Duplicate entry 'KCOCFPO23N000000001' for key 'cultural_facility.PRIMARY'] 무결성 제약조건 예외 발생기본적으로 JdbcItemWriter는 B..

spring 2025.06.19

[오늘의 문제] List

LinkedList list = new LinkedList();list.add(1);list.add(2);list.add(3);// 1. forfor (int i = 0; i 위 코드에서 더 빠른 성능을 보여주는 코드는 무엇인가요?ArrayListArrayList는 이름 그대로 배열을 사용해서 데이터를 관리합니다.public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable{ private static final int DEFAULT_CAPACITY = 10;private Object[] grow(int minCapacity) { int oldCa..

Java 2025.06.09

웹 공격으로 생각해보는 JWT

CSRF(Cross-Site Request Fogery)피해자가 서버로 공격자의 의도가 담긴 요청을 하게 만드는 공격로그인된 사용자의 요청에 공격자가 원하는 요청으로 유도하는 공격 방법입니다.공격 가능 예시를 살펴보겠습니다.잘못쓴 GET 요청게시판 서비스에서 모 개발자가 게시글을 삭제하는 URI를 다음과 같이 정의했습니다.GET https://gucoding.com/post/delete/1모 개발자는 해당 요청을 작성자 본인만 보낼 수 있게 설계해서 안전하다고 생각했습니다. 그러나 이것은 틀렸습니다.공격자는 작성자 본인은 의도하지 않게 요청을 보내도록 의도할 수 있습니다.예를들어, 공격자가 공격을 위한 게시글을 하나 올립니다.해당 게시글에 이미지를 첨부하는데, 이 때 이미지 태그에다음 html 태그를 첨..

개념잡기 2025.06.02

캐시

부끄럽지만 컴퓨터공학 관련 용어 베이스가 제대로 잡혀있지 않은 상태입니다…반성하고자 지금부터라도 [개념잡기] 시리즈에서 틈틈이 정리하고자합니다.기본 개념들에 대한 간략한 설명이 좀 많은 점 양해 부탁드립니다.개념캐시란 데이터나 값을 미리 복사해 놓는 임시 장소 개념입니다.주 저장소에서 접근하는 시간을 줄이거나, 값을 다시 계산하지 않고 싶을 때 사용합니다.이 개념은 다양한 컴퓨터 분야에서 사용됩니다. 캐시는 제가 이해하기 쉽도록, 편의상 크게 하드웨어 수준과, 애플리케이션 수준으로 구분하겠습니다.하드웨어 캐시CPU 캐시 : CPU에서 주기억장치(RAM)에 접근을 빨리하고자 칩 내부에 별도로 탑재하는 작은 메모리디스크 캐시 : 디스크 제어와 외부와의 인터페이스를 위해 작은 컴퓨터를 내장하고 있다. 이 작은..

개념잡기 2025.05.28

게시글 페이지 번호로 조회

게시글을 조회할 때 페이지 번호로 조회한다는 요구사항이 있다면 일반적으로 생각하기에는 게시글의 총 개수가 필요하다고 생각이 듭니다.가령, 한 페이지 당 10개의 게시글을 보여주고 페이지번호를 1~10까지 보여준다고 가정합시다.총 게시물이 40개가 있다면 (1~4)페이지버튼, 이전버튼을 노출하면 되고,총 게시물이 200개가 있다면 (1~10)페이지버튼, 이전, 다음버튼을 노출하면 됩니다. 그러나 모든 게시글의 개수를 매번 주는것은 얼마안가 성능에 영향을 끼칩니다.select count(*) from post where board_id = 1;+----------+| count(*) |+----------+| 12020000 |+----------+1 row in set (1.09 sec)ExtraUsing..

DB 2025.05.28

Secondary Index 예제

복합 인덱스 select * from post where board_id = 1 order by post_id desc limit 100 offset 99999900;오늘의 문제에서 알아본 보조 인덱스를 조금 더 파려고 합니다.위 쿼리는 게시판 id가 1인 모든 게시물을 최신 순, 내림차순으로 조회합니다.explain select * from post where board_id = 1 order by post_id desc limit 30 offset 90;Extra Using where; Using filesort 실행계획을 보면 Using filesort. 인덱스가 없기에 내부적으로 정렬이 들어갔다는 뜻입니다.성능을 높이기 위해서 인덱스를 걸어줍니다.creat..

DB 2025.05.26

[오늘의 문제] Secondary Index (보조 인덱스)

오늘의 문제 - DBTable - exam_resultcolumn: id, user_id, school_id, scoreindex: id(PK), user_id(Secondary Index), school_id(Secondary Index)---------------------------------------------------------------------SELECT sum(score) from exam_result where school_id = 10;위 SQL을 개선하고자 할 때 어떤 방법이 있을까요? 그리고 그렇게 생각한 이유는 무엇인가요?InnoDB 기준1. Secondary Index는 어떤 데이터 구조로 이루어져 있나요?2. Secondary Index를 통해 데이터를 조회하는 것은 내부..

DB 2025.05.26

캡스톤 디자인 회고

정리하기지금까지 했던 프로젝트는 단순히 미니 프로젝트이거나 개인적인 실력의 한계 때문에 제대로된 코딩을 못한채 흐지부지 해왔습니다.그래서 학교 강의겸해서 진행한 캡스톤 디자인이 사실상 제 첫 프로젝트가 되었습니다.여러모로 아쉬운점도 있고 깨달은점도 있어서 다음 프로젝트를 진행할 때 참고하고자 남겨봅니다.프로젝트 소개서버쪽은 다른 팀원 한 분과 같이 진행했습니다. 중고경매 어플리케이션을 개발했고 제가 맡은 기능은인증(인가), 회원, 채팅, 포인트, 기타 외부 api(소셜로그인, 결제, 배송) 입니다.아키텍처를 간단하게 소개하면 기존 레이어드 아키텍처에서 도구레이어를 추했습니다.아키텍처 : 어떤 비즈니스 문제를 해결하기 위해, 준수해야하는 제약을 넣는 과정 (김우근)코드를 좀 더 깨끗하게 작성하려면 비즈니스..

회고 2025.05.25