[Kotlin] Kotlin이란 무엇일까?ZaManKotlin은 Jetbrain에서 개발한 현대적이고 범용적인 언어로, 자바와 완전히 호환되면서 자바보다 더 간결하고 안전한 코드를 작성할 수 있는 것이 특징입니다.탄생 배경Java의 한계Java는 1995년에 개발돼서 오랜 기간동안 쓰이다 보니 한계가 드러났습니다.보일러플레이트 코드단순한 작업도 너무 많은 코드를 써야 합니다.예시) getter/setter, equals, hashCode 등Null 안정성 부족Java의 가장 큰 단점중 하나는 NullPointerException(NPE)로 많은 버그가 null 때문에 발생합니다.컴파일 속도컴파일 속도가 느려서 대규모 프로젝트에서는 개발 생산성이 떨어집니다. 이런 한계들로 인해 Java를 사용하며 제품을 개발한 Jetbrain에서는 직접 더 나은 언어를 ..- 2025-09-02 21:02:58
- [DataBase] 검색은 어떻게 작동할까?ZaMan검색창을 보고 "검색 기능은 어떻게 작동하는걸까?" 라는 의문이 생겼습니다.그래서 검색을 하면 백엔드 서버에서 어떻게 가져오는지에 대해 조사를 해보았습니다.작은 서비스의 경우작은 서비스의 경우에는 데이터가 적어서 성능 문제가 거의 없기 때문에 데이터베이스에서 직접 검색합니다.LIKE 사용SELECT * FROM user WHERE name LIKE '%인간%';대신 이 방식은 앞에 %가 있으면 인덱스를 사용을 못해서 처리 시간이 느려집니다.FULLTEXT 사용SELECT id, name, MATCH(name) AGAINST ('인간' IN NATURAL LANGUAGE MODE) AS scoreFROM userWHERE MATCH(name) AGAINST ('인간')ORDER BY score DES..
- 2025-08-20 19:02:46
- [DataBase] 페이징(Pagination)ZaMan페이징이란?페이징(Pagination)은 대량의 데이터를 여러 페이지로 나누어 필요한 부분만 조회하는 기법입니다.예를 들어 게시판에서 한 페이지에 10개의 글을 보여주는 것처럼, 한 번에 모든 데이터를 가져오지 않고 필요한 범위만 읽어오는 방식입니다.페이징은 사용자 경험과 서버 성능 모두에 큰 영향을 미칩니다.페이징 방식LIMIT/OFFSET 기반 페이징많은 RDBMS(MySQL, PostgreSQL 등)에서 가장 흔하게 쓰는 방식으로 LIMIT와 OFFSET이 있습니다.SELECT * FROM reservationORDER BY created_at DESCLIMIT 10 OFFSET 20;// LIMIT : 한 번에 가져올 데이터 수// OFFSET : 앞에서 N개를 건너뛰고 이후부터 가져옴장점구현이 ..
- 2025-08-11 20:39:35
[BackEnd] FetchType & N+1 문제ZaManFetchTypeFetchtype이란 JPA(Java Persistence API)에서 연관된 엔티티를 어떻게 가져올지(데이터베이스에서 언제 로딩할지) 설정하는 방식입니다.enum 타입이며 아래와 같이 두 가지 종류가 있습니다.LAZY (지연 로딩)연관된 엔티티를 실제로 사용할 때까지 데이터베이스에서 조회를 하지 않아서 성능 최적화에 유리합니다.EAGER (즉시 로딩)연관된 엔티티를 조회 시 JOIN 등으로 즉시 함께 조회합니다.연관 어노테이션@ManyToOne, @OneToOne의 기본값은 FetchType.EAGER(즉시 로딩) 입니다.@OneToMany, ManyToMany의 기본값은 FetchType.LAZY(지연 로딩) 이여서 즉시 로딩을 사용할 때 EAGER 타입으로 변경해주어야 합니다.사용 ..- 2025-08-06 19:28:22
- [Spring] Spring filterZaManSpring filter는 웹 애플리케이션에서 HTTP 요청과 응답을 가로채서 처리할 수 있는 컴포넌트입니다.서블릿 기반의 스프링 애플리케이션에서 동작하며, 스프링 자체보다는 Servlet 스펙의 일부입니다.Filter는 DispatcherServlet보다 먼저 실행됩니다.Client → Filter → DispatcherServlet → Controller → DispatcherServlet → Filter → Client즉, 요청이 DispatcherServlet까지 도달하기 전에 필터를 통해 먼저 가공하거나 검사할 수 있고, 응답을 보낼 때도 가공할 수 있습니다.Filter의 대표적인 활용 예로그 출력 : 요청 시간, 요청 URI 등을 콘솔에 출력인코딩 처리: 요청 파라미터 인코딩 강제 설정보안 검..
- 2025-07-23 19:35:48
- [BackEnd] QueryDSLZaManJPQL이란?JPQL(Java Persistence Query Language)는 테이블을 대상으로 쿼리하는 것이 아닌 엔티티 객체를 대상으로 쿼리합니다.SQL과 비슷한 문법을 가지며 JPQL은 결국 SQL로 변환됩니다. JPA에서 제공하는 CRUD와 같은 메서드 호출만으로 섬세한 쿼리 작성이 어려운 이유로 나오게 되었습니다.JPQL 특징- 테이블이 아닌 객체를 검색하는 객체지향 쿼리- JPA는 JPQL을 분석하여 SQL을 생성한 뒤 DB에서 조회기본 문법- 전체 회원 조회 > SELECT m FROM Member m - 조건 조회 > SELECT m FROM Member m WHERE m.age > 17- 이름만 조회 > SELECT m.name FROM Member mString jpql = "SEL..
- 2025-07-21 18:52:19
[BackEnd] 예외 처리ZaMan예외처리를 하는 이유예외를 발생시켜서 로그를 남기면 로그를 확인하고 문제가 발생한 원인을 빠르게 찾을 수 있습니다.예를 들어 게시글마다 고유 id가 있고어떤 id의 게시글을 찾을려고 할 때, 게시글이 존재한다면 아래 사진과 같이 게시글 정보가 응답이 됩니다.그러나 만약 id에 해당하는 게시글이 존재하지 않거나, 다른 예외에서는아래 사진과 같이 상태 코드 500(서버 에러)이 응답으로 옵니다.여기서 오류의 원인도 안적혀있으니, 어느 부분에서 문제가 발생한건지 파악하기가 어렵습니다.그래서 id에 해당하는 게시글이 없는 경우는 404 Not found와 함께 오류 원인을 함께 보내는 예외 처리를 했더니,왜 문제가 발생했는지 한 눈에 보기도 쉬워졌습니다.장점각 문제마다 예외 처리로 맞는 로그를 남겨서 문제 추적..- 2025-07-15 21:07:09
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)