전체 글 19

카테고리 없음
프록시 객체 이해하기 - 1

프록시란?프록시는 대리 객체라고도 불리며, 클라이언트로부터 실제 오브젝트인 타겟을 대신해서 요청을 받는 대리 객체이다. 즉, 실제 오브젝트인 타겟은 프록시를 통해 최종적으로 요청을 받아 처리하면서 추가적인 기능(예: 로깅, 트랜잭션 관리, 보안 검사 등)을 수행할 수 있다. 이를 통해 최종적으로 실제 오브젝트인 타겟은 자신의 기능에만 집중하고 부가기능은 프록시에게 위임하게 된다. 여기서 부가기능이라고 하면 클라이언트, 타겟 객체를 직접적으로 수정하지 않고 기능을 타겟 객체의 기능을 추가하는 것을 의미한다.  왜 프록시를 사용하는가?클라이언트가 타겟에 접근하는 방법을 제어할 때 (JPA Lazy Loading)타겟에 부가적인 기능을 부여해주기 위해 (@Transactional 어노테이션, AOP)프록시를 ..

DB
GROUP BY와 HAVING 이해하기

안녕하세요 이번에 SQL를 공부하다가 자주 사용되는 명령어 중 GROUP BY와 HAVING에 대한 개념을 알았으나, 이를 체득화하는 과정에서 만든 저만의 기준에 대해서 이야기하고자 합니다. 본문쿼리를 작성하다보면 GROUP BY와 HAVING 구절을 자주 접하게 됩니다. 특히 집계함수를 같이 사용한다면 더더욱 자주 접합니다. 실제로 프로그래머스 SQL 고득점 Kit 문제중 '재구매가 일어난 상품과 회원 리스트 구하기' 문제가 GROUP BY와 HAVING을 사용해서 해결하게 됩니다. 문제 링크는 하단에 첨부하겠습니다. 직접 풀어보시고 싶은 분들은 풀어보시면 좋을 것 같습니다. GROUP BY'GROUP BY'란 같은 값을 가진 행끼리 하나의 그룹으로 묶어주는 역할을 수행하게 됩니다.예를 들어, 아래와 ..

카테고리 없음
.toList와 .collect(Collectors.toList()) 차이

백준 13410 거꾸로 구구단 문제를 풀면서 문자열 배열을 리스트로 변환하고 해당 리스트의 원소들을 reverse 해야하는 일이 있었다. 문자열 배열을 리스트로 변환할 때 Stream API를 사용하여 아래의 코드로 작성하였다.for (int i = 0; i list = Arrays.stream(String.valueOf(N * (i + 1)).split("")).toList(); Collections.reverse(list); max = Math.max(max, Integer.parseInt(temp[i]));} 실행해본 결과 아래와 같은 `UnsupportedOperationException` 에러를 만났다.  이후 코드를 다시 살펴보니 IDE에서 다음과 같은 주의사항(?)창을 보여주었다..

카테고리 없음
JSCODE 자바 모의면접 스터디를 마치며..

자바 모의면접 스터디를 마치며오늘은 5주 동안 진행했던 자바 모의면접 스터디를 돌아보는 글을 써보려고 한다. 솔직히 이 스터디에 참여하게 된 이유는 신입 개발자로서의 부족함을 채우고 싶어서였다. 기술 면접에 대한 부담감도 있었고, 자바라는 언어의 기본조차 제대로 알고 있는지 스스로 의심스러울 때가 많았다. 그래서 면접에서 나올 법한 질문들을 체계적으로 정리하고 연습할 기회가 필요했다. 스터디는 매주 자바의 전반적인 개념을 정리하고, 블로그에 학습 내용을 올리는 것부터 시작됐다. 그리고 그걸 바탕으로 발표 연습을 하고, 모의 면접 형식으로 서로 질문과 답변을 주고받는 시간을 가졌다. 처음엔 발표도, 질문도 어색했는데, 주마다 반복하다 보니 점점 익숙해졌다. 다른 사람들이 공부한 내용을 듣는 것도 생각보다 ..

CS/기술면접
자바 기술면접 - 2

String literal과 new String(””)의 차이를 설명해 주세요.String Literal (String str = “hello”)String Pool 영역에 저장한다.문자열 재사용메모리 효율적new String (String str = new String(”hello”))Heap 메모리에 저장항상 새로운 객체 생성메모리 사용량 증가String, StringBuilder, StringBuffer의 차이점에 대해서 설명해주세요.String불변객체객체 생성 이후, 재할당(재참조)는 가능하지만, 한번 할당되면 내부 데이터를 변경할 수 없는 객체문자열 연산시에 새로운 객체가 생성된다.불변객체이기 때문에 멀티스레드 환경에서 동일한 데이터를 보장받을 수 있다.StringBuilder가변객체문자열 연산..

DB
온라인 쇼핑몰 관리 시스템

연습용 테이블 설계 요구사항: 온라인 쇼핑몰 아이템 관리 시스템온라인 쇼핑몰 아이템 관리 시스템을 위해 데이터베이스를 설계하려고 합니다.해당 시스템은 다음 요구사항을 충족해야 합니다 1. 회원(member): 각 회원은 회원ID, 이름, 이메일, 생성일시를 가지고 있습니다.2. 상품(product): 어떤 회원이 상품을 등록했는지에 대한 정보가 필요합니다. 상품ID, 상품명, 상품 상세설명, 상품 가격, 총 수량을 가지고 있습니다.3. 상품 이미지(product_image): 각 상품에 대한 이미지가 필요합니다. 상품 이미지ID, 상품ID, 메인 이미지, 서브 이미지1, 서브 이미지2, 서브 이미지3, 서브 이미지4로 구성되며 총 5개의 이미지가 필요합니다. 초기 설계 CREATE TABLE IF NOT..

CS/기술면접
자바 기술면접 - 1

JSCODE 자바 기술면접 모의스터디에 참여하면서 정리한 자료입니다.잘못된 정보가 있다면 언제든지 지적해주시면 감사하겠습니다. Java의 특징에 대해서 설명해주세요.객체 지향 언어이다.객체: 실생활에서 사용되는 것들을 객체라고 볼 수 있다. 객체는 ‘상태’와 ‘행위’로 나타낸다.추상화: 여러 객체들의 공통적인 특성을 추출하는 행위를 의미한다.상속: 기존 클래스를 확장하여 새로운 상위 클래스를 만드는 것을 의미한다.캡슐화: 내부의 ‘상태’와 ‘행위’를 외부로부터 감추고, 외부에는 필요한 ‘행위’만 노출시키는 것을 의미한다.다형성: 하나의 타입이 상황에 따라서 다양한 타입으로 변할 수 있는 것을 의미한다.JVM위에서 동작하기 때문에 OS로부터 독립적이다.JVM: 자바 바이트 코드(.class 파일)를 OS에..

개발 일지
왜 엔티티를 반환하지 않고 DTO를 반환하는가 - 2

앞서, 순환참조로 인해 엔티티를 반환하지 않고 DTO를 반환한다고 글을 작성했다. 그렇다면 어디서 순환참조가 발생하는지 먼저 알아야한다.작성했던 예제를 디버깅해보면 요청시에 발생하는 것이 아니라 마지막으로 Controller에서 응답이 나갈 때 순홤참조 오류가 발생한다. ex 메세지 하위에 cause 라는 항목을 보게 되면 JsonMappingException이 발생한다.즉, 응답으로 나가야하는 Json 형식에 데이터를 매핑할 수 없다는 오류가 발생한다. Jackson 라이브러리를 사용해서 객체를 -> Json으로 바꿔주는것 같은데 왜 에러가 발생했을까?먼저, 해당 문제를 보기 전에 Spring Boot에서 기본으로 제공해주는 HttpMessageConverter에 대해서 간단하게 알고 넘어가자 Http..

CS/알고리즘
SQL 문제 풀기 - 3

주어진 문제를 풀기 위해서는 함수와 조인 기법을 사용해야한다. 우선 조인(join)이란?두 개 이상의 테이블에서 데이터를 가져와서 마치 하나의 테이블인 것처럼 데이터를 가져오는 기법을 말한다. 조인과 관련된 내용들을 포스팅하는 글은 아니니, 가볍게 개념정도만 알고가면 좋을 듯하다. 해당 문제를 처음 풀었을 때, left 조인을 사용하여 문제를 풀었었다. 두 테이블의 데이터를 가져온 거 까지는 좋았으나, REPLY_ID 값이 없는 데이터도 있었다.left 조인한 후 where 조건 절에 REPLY_ID 값이 null이 아닌 데이터를 가져오는 것도 하나의 방법일 순 있지만, 해당 문제를 직관적으로 풀고 싶었다. SELECT TITLE, G.BOARD_ID, R.RE..