본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ

분류 전체보기464

자신감, 앞으로 나아가는 방법 모르는 일에 도전하고, 일하면서 자신감이 점점 생기고, 실수도 하고 혼도 나면서 자신감이 떨어지기도 하고그러길 반복하며 결국 실수없이 맡은 업무를 잘해 나가게 되고, 팀원들을 대표해서 일하기도 했던 경험들을 통해어떤 일이든 도전하고 자신감을 가지며 일할 수 있었다.다양한 사람들을 경험하며 다치고 깨지더라도 회복하고 일어서며, 어떻게든 미래를 위해 노력하겠다는 다짐이나의 큰 원동력이고 다시 일어설 수 있는 계기가 되었기에 가능했다.    그러나 최근엔 이런 기세가 많이 약해지고 자신감을 잃어 버릴 정도로 슬럼프를 겪기도 한 것 같다.왜 이렇게 된 것일까?나이를 먹어갈 수록 더 많은일을 수행해왔고, 또 잘 해왔으며 인정도 받았다.그런데 어쩌다가 이런 슬럼프를 겪으며 위축되고 자신감을 잃으며 겁이 많아지게.. 2024. 4. 24.
[CS] java에서 String이 불변 객체인 이유 자바에서 String 문자열은 불변 객체입니다. String으로 선언한 변수가 변하지 않는 다는 뜻에서 불변이 붙은것은 아닙니다. String a = "num1"; a = "num2"; "num1"이라는 String 객체가 만들어지고 이를 a가 참조하는 식으로 내부에서 과정이 이루어집니다. a="num1"을 선언하며 "num1"이 상수풀에 없으면 num1을 새로 만들고 a로 참조하도록 하는 것입니다. 다만 a ="num2" 를 수행하며 값이 변경되는 게 아닌 "num2"라는 새로운 String 객체를 만들고 타입 a에 참조시키는 것입니다. 왜 이런 구조를 띠는걸까요? String 객체는 heap 메모리가 아닌 상수풀에 등록되고 참조를 반환합니다. 이렇게 설계된 이유는 String은 상당히 자주쓰여서 상수.. 2024. 4. 15.
[CS] SOP CORS 웹 개발에서 알아두면 좋은 내용 예전에는 출처(프로토콜, 호스트명, 포트)가 다르더라도 ajax 통신을 수행할 때 요청과 응답이 문제없이 가능했습니다. 하지만 이러한 방식에는 보안에 취약하다는 문제가 생길 수 있습니다. Cross-Site Scripting (XSS) 1. 사용자의 쿠키 정보를 가져오는 자바스크립트 코드(악성코드)를 포함한 게시글을 작성한다. 2. 어떤 사용자가 로그인하면 쿠키에 그 정보가 저장됨 3. 해커가 작성해둔 게시글을 사용자가 클릭했을 때 악성코드가 작동 4. 쿠키에 저장된 사용자 정보가 해커의 웹사이트에 전송됨 Cross-site request forgery (CSRF) - 사이트 간 요청 위조 1. 사용자가 보안이 취약한 서비스에 로그인 한다. 2. 사용자 정보가 쿠키에 저장된다. 3. 해커가 만든 피싱 사.. 2024. 4. 11.
[JPA] 1+N 문제, 현상 정리 JPA N+1 (1번 조회해야할 것을 N개 종류의 데이터 각각을 추가로 조회하게 되서 총 N+1번 DB조회를 하게 되는문제이다.) JPA의 Entity 조회시 Query 한번 내부에 존재하는 다른 연관관계에 접근할 때 또 다시 한번 쿼리가 발생하는 비효율적인 상황을 말한다. 즉시 로딩으로 데이터를 가져오는 경우 ( N+1 문제가 바로 발생 ) 지연 로딩으로 데이터를 가져온 이후에 가져온 데이터에서 하위 엔티티를 다시 조회하는 경우 ( 하위 엔티티를 조회하는 시점에 발생 ) 0. 내가 정리하는 N+1 문제 @Entity public class MemberJpql extends BaseEmbeded { @Id @GeneratedValue private Long id; private String usernam.. 2024. 4. 1.
[Spring] JPA 에러must be manually assigned before calling 'persist()' 에러 해결하기 JPA 연습중에 다음과 같은 에러가 발견되었다. org.hibernate.id.IdentifierGenerationException: Identifier of entity 'cohttp://m.minod.jpa.domain.inherit.extend.MemberBase' must be manually assigned before calling 'persist()' Identifier Entity 에러라고 함 테스트 소스는 다음과 같다. em.persist() 할 때 에러가 나는데 원인이 무엇인지?? @Slf4j @SpringBootTest public class MappedSuperclassTest { // entity 클래스들에 상속시켜서 필드만 추가하게 하는 어노테이션인 @MappedSuperclas.. 2024. 3. 27.
[JPA] EntityExistsException: detached entity passed to persist 문제 해결하기 Mbr1 소스에서 Mbr1 관련해서 엔티티가 이미 만들어져 더 생성할 수 없다는 에러가 나왔었습니다. @Entity @Table(name = "MBR") // 테이블 id 원하는데로 지정가능, @SequenceGenerator( name = "MBR_SEQ_GENERATOR", sequenceName = "MBR_SEQ", initialValue=1, allocationSize=1 ) @ToString public class Mbr1 { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MBR_SEQ_GENERATOR") private Long id; private String username; public Mbr1(){} publ.. 2024. 3. 24.
[공유, 추천] 어노테이션 이란? https://advenoh.tistory.com/21 자바 커스텀 어노테이션 만들기 1. 어노테이션이란 스프링 프레임워크를 사용하면 어노테이션을 자주 사용하게 됩니다. 아래는 스프링 웹 MVC를 사용한 예로 GET HTTP 요청(/helloworld)이 있으면 “Hello World”를 담아서 뷰에 전달되 advenoh.tistory.com 너무 잘 정리되어있는 블로그라서 추천 2024. 3. 21.
[CS] 동기와 비동기의 차이, 멀티스레드와 비동기의 차이 동시성 이슈를 해결하는 과정에서 개념을 정리해볼 필요가 있어 정리하게 되었습니다. 동기와 비동기, 이게 무슨 이야기인지 정리해보려 합니다. synchronize (동기화) 란 무엇인가?? 현재 상태를 적용하는 것을 말하는 동기화, 내가 무언가 조치를 취했다면, 해당 내용이 반영되어야 합니다. 이를 위해 동기화를 말하는 것이며, 동시성을 이야기도 합니다. 동기화를 지원 이유는 공유자원을 다루면서 정합성이 깨지는 것을 방지하기 위해 사용하기도 합니다. 그럼 동기는 무엇인가요? 위의 동기화 와는 다르게, 프로그래밍에서 작업을 처리하는 방식에 대해 정할 때, 동기적으로 처리 또는 비동기적으로 처리 라고 이야기 할 수 있습니다. 동기화와 이름이 비슷하지만 구분해야 하는 개념이기에 먼저 적어봤습니다. 동기(Sync.. 2024. 3. 21.
[intelliJ] 자동 완성 약어, 축약어 간단 정리 이는 인텔리J에서 제공하는 라이브 템플릿 중에 미리 선언 된 것을 정리해봤습니다. 메인 메서드 완성 : main System.out.println : sout 향상된 for문 완성 : iter 일반 for문 완성 : itar 자동 null 체크 if문 완성 : ifn 자동 not null 체크 if문 완성 : inn 2024. 3. 16.
[Spring] 테스트에서 Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test 문제 해결 Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test 테스트 환경에서 테스트 중에 위 같은 에러를 확인했습니다. 테스트 경로에서 Config파일을 읽지 못 한다고 하는 것 같은데, 사실 이 에러는 @SpringBootTest 클래스가 실행중 에러가 발생하는 것입니다. @SpringBootTest가 실행되지면서 SpringBootApplication 경로를 읽지 못해서 일 수도 있고, 의존성 설정된 dataSource를 자동주입 실패했을 경우 실패할 수 있고, 컴포넌트 스캔 경로가 맞지 않아 Config 경로를 못읽어 Bean생성 실.. 2024. 3. 6.
[AWS] SpringBoot 시크릿 매니저 사용하기. 스프링 부트에서 프로퍼티 정보를 SecretManager를 활용해서 불러오는 식으로 변경 해봤습니다. 보안적인 이슈를 막기 위해서, 단단한 프로젝트를 만들려면, 프로퍼티에 있는 db정보를 암호화 하는 것도 필요합니다. 그것을 위한 방법으로 KMS나 SecretManager를 통해 외부에서 암호정보를 가져오는 전략이 있는데, 이를 프로젝트에 적용해봤습니다. 필요한 것은 Secret Manager와 스프링 부트 프로젝트 입니다. Secret Manager를 만들고, 거기에 db의 ID와 PW 정보를 보관하고, 부트 프로젝트 실행시 시크릿 매니저에서 값을 가져와 적용시키는 방식으로 개발했습니다. - 시크릿 매니저 준비 저는 자유로운 형식의 키보관 목적이기에 "다른 유형의 보안 암호"를 선택했습니다. 보안 암호.. 2024. 3. 3.
[IntelliJ] openJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 해결방법 OpenJDK 사용하다가 경고문구를 발견했습니다. openJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended openjdk에서 클래스 로딩 시 Class Data Sharing(CDS) 기능을 사용하면 발생합니다. 오류는 경고 메시지이며, 어플리케이션에 직접적인 영향을 주지는 않습니다. 저는openjdk-17버전을 사용중에 이런 문구를 확인했습니다. 문구를 없애려면 다음과 같은 방법이 있습니다. 1. -Xshare:off 옵션을 사용하여 CDS 비활성화 2. 클래스 로딩 전에 CDS를 직접 사용하여 미리 클래스 정보 공유파일을 생성하.. 2024. 3. 3.