본문 바로가기

전체 글89

[Git|졸업작품] spring boot로 작업한 뭉키를 다시 돌아보며 (6) - .gitignore을 통해 application 파일 숨기기 6. gitignore을 통해 application.yml 파일에 노출되어 있는 database 계정 정보를 제외시켜야 한다. 개요 spring 프로젝트를 배포할 때 Application 파일이 깃허브와 같이 외부에 유출이 되면 aws 클라우드 서비스 계정과 같은 중요한 정보가 같이 유출되어 과다한 요금이 청구될 수 있다. 이와같은 불상사를 방지하기 위해 gitignore을 통해 Git 버전 관리에서 반드시 제외해야 한다. 설정방법 .gitignore 파일에 깃허브에 올리고싶지 않은 파일명을 작성해준다. 작성자는 application 파일을 yml 형식으로 작성하고 있으므로 yml 확장자로 작성하였다. 이후 git에 commit & push를 진행해주면 된다. * .gitignore를 수정하고 커밋 & .. 2023. 3. 27.
[졸업작품] spring boot로 작업한 뭉키를 다시 돌아보며 (5) - Entity의 1:N 매핑의 성능 하락 5. Entity에서 1:N 매핑을 사용하여 이는 연관관계 관리를 위해 추가로 UPDATE SQL이 실행되어 성능 하락을 야기 부제: JPA (1) N+1 문제 N+1문제란 1:N관계에서 1번의 쿼리를 날렸는데 추가로 N번의 쿼리가 더 발생하는 상황이다. 예를들어, 고객 한명(1)이 여러 개의 계좌(N)을 가졌을 때를 가정한다. 이때, 고객의 정보를 조회하면 연관 관계를 갖고있는 여러 개의 계좌정보들까지 N번 조회되는 경우가 발생한다. * 또한, 1:N매핑을 사용하면 DB에 대한 쿼리가 복잡해진다. 매핑된 엔티티들을 로딩하기 위해선 join을 사용해야 하는데 join은 성능 저하의 주요 원인이 된다. N+1문제는 N:1, 1:N 관계에서 발생한다. (2) 1:N매핑에서의 UPDATE SQL 문제 1:N .. 2023. 3. 26.
[졸업작품] spring boot로 작업한 뭉키를 다시 돌아보며 (4) - Entity의 무분별한 Setter 사용의 문제점 3. Entity에서 Setter를 사용하게 되면 객체의 일관성을 보장하기 어려움 (1) 데이터 무결성, 일관성 저해 Entity 클래스는 데이터를 나타내는 클래스로 사용된다. 이 클래스에는 데이터베이스 테이블 열과 대응되는 필드들이 포함된다. 이러한 필드들은 private로 선언되어 외부에서 직접적으로 접근이 불가능하도록 하였으나 public으로 선언된 getter와 setter 메서드를 통해 이 필드에 접근할 수 있게 한다. 그러나, setter를 무분별하게 사용하게 된다면 데이터의 무결성이 깨질 수 있다. 예를 들어, Entity의 필드 중 하나가 null일 수 있다면 setter를 이용해 해당 필드에 null 값을 할당하면 데이터 무결성이 깨진다. (데이터 무결성 중 개체 무결성) Entity 필.. 2023. 3. 22.
[Java | Algorithm] 소수의 개수를 출력하시오. (에라토스테네스 체) 소수 갯수를 구하는 관련 문제는 굉장히 많이 접해왔는데(ㅡ.ㅡ) 풀때마다 까먹는 것 같아서 이김에 확실히 정리해두고 넘어가려고 한다. 인프런에서 자바 알고리즘 코테대비 강의를 듣고있고 해당 문제는 강의의 내용을 참조하였다. 설명 자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요. 만약 20이 입력되면 1부터 20까지의 소수는 2, 3, 5, 7, 11, 13, 17, 19로 총 8개입니다. 입력 첫 줄에 자연수의 개수 N(2 2023. 3. 22.
[Java | programmers] 정규표현식(regex) 해당 포스팅은 https://school.programmers.co.kr/learn/courses/11/11-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D 에서 학습한 내용을 토대로 작성합니다. 인프런에서 자바 알고리즘 문제중 문자열 관련 강의를 수강하다가 replaceAll 메소드를 사용하는 모습을 보았고 이때 정규식에 무지한 나는 정규식을 학습 할 필요가 있다고 생각하여 이 포스팅을 작성하게 되었다. 정규표현식(regex)이란? 텍스트에서 원하는 조건과 일치하는 문자열을 찾아내거나 원하는 조건과 텍스트가 일치하는지 참/거짓 여부를 판단하는 등의 상황에 사용된다. 예를 들어, 여러 사람이 있는 경우 이름이 a로 시작하는 사람을 찾아내거나, 사용자가 입력한 문자열이 이.. 2023. 3. 13.
[졸업작품] spring boot로 작업한 뭉키를 다시 돌아보며 (3) - 트랜잭션의 readonly 옵션 2. Service에서 데이터를 가져오는 트랜잭션인 경우 readonly = true 옵션을 붙여야 영속성 컨텍스트가 변경 감지를 하지 않아 성능 향상 (1) Spring에서의 트랜잭션 처리 스프링 부트에서는 @Transactional 어노테이션을 사용하여 트랜잭션 처리를 할 수 있다. @Transactional이 적용되어 있을 경우, 해당 클래스에 트랜잭션 기능이 적용된 프록시 객체가 생성된다. 이 프록시 객체는 @Transactioanl이 포함된 메소드가 호출 될 경우 PlatformTransactionManager를 사용하여 트랜잭션을 시작하고 정상 여부에 따라 Commit 또는 Rollback 한다. 정상 여부는 RuntimeException 발생 유무 기준으로 결정되며 RuntimeExcepti.. 2023. 3. 1.
[졸업작품] spring boot로 작업한 뭉키를 다시 돌아보며 (2) - REST API 설계 규칙 1. Rest API 설계 규칙을 지키지 않은 점. Rest API 설계 규칙을 다시 돌아보자 Rest란 Representational State Transfer의 약어로 클라이언트와 서버가 데이터를 주고 받는 방식에 대한 아키텍처 스타일이다. Rest에는 여섯 가지 기본 원칙이 있고 이 가이드를 준수한 인터페이스는 Restful하다고 표현한다. Stateless (무상태성) 서버는 Response cache-control 헤더에 해당 요청의 캐싱 가능 여부를 제공해야 한다. 이를 제공한다면 클라이언트는 Response를 캐싱하여 서버와 클라이언트 간의 상호작용을 줄이고 성능과 서버 가용성을 늘릴 수 있다. Uniform interface (일관된 인터페이스) 보편적인 소프트웨어 엔지니어링 원칙을 com.. 2023. 2. 10.
[java] Collections.sort override 구름 알고리즘 먼데이 2주차 3번 문제를 해결하며 java 답안은 제공이 되지않아 구글링을 하며 다른 분들의 코드를 참고하여 풀었다. 그러던중 다른 분의 코드를 보게되었다. 외부 클래스를 생성하고 새로운 클래스가 생겼으므로 Collections.sort 메소드를 오버라이드하여 새로운 정렬 메소드를 정의하는 방법을 보게 되었다. 람다식을 이용하여 해결하셨는데 기억에 꼭 남기고 싶어서 벨로그에 작성하게 되었다. Collections.sort(list, comparator); comparable은 this를 기준으로 비교하지만 comparator은 비교 대상을 2개로 두고 비교한다. int compareTo(T op1, T op2)로 두 객체의 특정값을 연산해서 음수라면 op1가 작은 것, 양수라면 op1가 .. 2023. 2. 10.
[java] 입력받는 방법 2가지 Java가 사용자로부터 입력받는 방법으로 크게 2가지가 있다 1. Scanner Scanner는 자료형이 자동으로 정해지기 때문에 입력받을 때 따로 형 변환을 할 필요가 없다. 공백과 줄바꿈을 모두 경계로 인식해서 입력을 받을 때 매우 용이하다. 이러한 편리함 때문에 대부분 입력을 받을 때 Scanner를 이용한다. Scanner 클래스를 사용하기 위해서는 import가 필요하다. Scanner 객체의 인자로는 System.in이 필요하다. System.in은 InputStream의 객체이다. 이때, InputStream은 콘솔 입력을 뜻한다. import java.util.Scanner Scanner sc = new Scanner(System.in); // 콘솔입력 2. BufferedReader 편리.. 2023. 2. 10.