본문 바로가기

728x90
반응형

분류 전체보기

(83)
[Java] 대충 만든 자판 문제 설명휴대폰의 자판은 컴퓨터 키보드 자판과는 다르게 하나의 키에 여러 개의 문자가 할당될 수 있습니다. 키 하나에 여러 문자가 할당된 경우, 동일한 키를 연속해서 빠르게 누르면 할당된 순서대로 문자가 바뀝니다.예를 들어, 1번 키에 "A", "B", "C" 순서대로 문자가 할당되어 있다면 1번 키를 한 번 누르면 "A", 두 번 누르면 "B", 세 번 누르면 "C"가 되는 식입니다.같은 규칙을 적용해 아무렇게나 만든 휴대폰 자판이 있습니다. 이 휴대폰 자판은 키의 개수가 1개부터 최대 100개까지 있을 수 있으며, 특정 키를 눌렀을 때 입력되는 문자들도 무작위로 배열되어 있습니다. 또, 같은 문자가 자판 전체에 여러 번 할당된 경우도 있고, 키 하나에 같은 문자가 여러 번 할당된 경우도 있습니다. 심..
[Error] MySQL 버전 충돌 (macOS/Homebrew) 예전에 공부용으로 homebrew로 설치된 mysql이 있었는데 이번에 예제 따라간다고 웹에서 MySQL 8.4 dmg를 추가 설치하면서 두 버전이 같은 포트와 데이터 디렉토리를 공유하며 지속된 충돌문제가 발생했다.발생된 로그로그설명Unable to lock ./ibdata1 error: 35InnoDB 데이터 파일(ibdata1)을 중복 프로세스가 잠그려 함Can't connect to local MySQL server through socket '/tmp/mysql.sock'이미 다른 인스턴스가 포트를 점유하거나 소켓 경로 다름Access denied for user 'root'@'localhost'root 인증 플러그인 꼬임 (caching_sha2_password ↔ mysql_native_pas..
[Spring] JPA N+1 문제 상황 요약단건 조회시 1:N 양방향 관계로 설정된 A 엔티티와 연결된 B 엔티티 목록을 함께 내려주는 기능을 구현해야 했다.@Entitypublic class Todo { @OneToMany(mappedBy = "todo", fetch = FetchType.LAZY) private List comments = new ArrayList();}@Entitypublic class Comment { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "todo_id") private Todo todo;} Todo를 불러와 그 안의 todo.getComments()를 호출했을 때 다음과 같이 쿼리 두번이상 실행되는 문제가 발생했다.select..
[Error] JPA 양방향 연관관계에서 무한 루프문제 해결 문제단건 조회시 해당 엔티티에 딸린 댓글들을 가져올 때 엔티티를 그대로 반환하면서 무한 루프 문제가 발생했다.Todo와 Comment는 서로 양방향 연관관계로 연결되어있다. 원인@RestController는 반환값을 자동으로 JSON 직렬화한다고 한다. 그때 양방향 연관관계에서 Jackson이 Todo 객체를 JSON으로 변환하려 함Todo 내부의 comments를 직렬화하려 함각 Comment는 다시 todo를 가지고 있어서 Todo 직렬화 시도Todo → Comment → Todo → Comment … 🔁와 같은 순환문제가 발생한다. 즉, 객체가 서로를 참조하고 있어서 JSON 변환이 무한 루프에 빠지는 것해결해결방법은 여러가지가 있다고 하는데 나는 @JsonManagedReference / @Js..
[Error] 일정 트러블 슈팅 어려웠던 부분1.JPA 관계 설정ERD도 그려봤고 엔티티에도 다대일 일대다 양방향 관계 설정도 했다. 문제는 DTO. 사실 그냥 내 문제잘못된 설계Comment comment = new Comment( request.getContent(), request.getUsername(), request.getPassword(), request.getTodo() // ❌ request에서 Todo를 직접 받음);이건 request DTO에 Todo 엔티티가 직접 들어있다는 전제인데, 클라이언트는 Todo 엔티티 구조를 모름 Todo의 id만 알고있음DTO는 엔티티를 몰라야함!!또한 JPA가 관리하지 않는(영속되지 않은) Todo 객체가 들어가면 연관관계가 깨질 수 있음DTO는 단순히 데이..
[Spring] JPA 관계 설정(1:N/N:1) JPA 관계 설정ERD에서 DB간 관계를 설정했다면 그 관계를 자바 객체 수준에서 반영하는 과정을 의미한다. 즉 ERD 테이블 관계를 코드로 옮겨온다 라고 이해하면 될 것 같다. ERDJPA 관계 설정표현 대상데이터베이스자바 객체단위테이블엔티티 클래스관계 표현PK/FK어노테이션 (@OneToMany, @ManyToOne)주 언어SQL, 다이어그램Java역할설계구현결과DB 스키마코드 로직에서의 연결JPA 관계 설정 핵심 키워드 정리1. @OneToMany / @ManyToOne — 가장 기본적인 관계 표현의미1:N 관계 (예: Todo 1개 → Comment 여러 개)N:1 관계 (예: Comment 여러 개 → Todo 1개)키워드 포인트외래키(FK) 는 항상 N 쪽(다수 쪽) 에 존재한다.→ 그래서 @..
[Spring] 수정 사항 발생시 자동 리빌드 Auto Reload API 구현 후 포스트맨에서 통신할 때 수정 사항이 발생하면 서버를 껐다 켜서 컴파일 시켜야했다. 수정사항이 얼마나 많은데 그때마다 서버 껐다 킬 수는 없으니 방법을 알아보다 핫 리로드 설정을 보게 되었다.왜 서버를 껐다 켜야 수정사항이 반영되는 걸까?java는 코드를 컴파일러가 기계어로 번역 후 실행하는 컴파일 언어다. 저장 즉시 실행되는 것이 아니라 컴파일 -> 클래스 로딩 -> 실행 순의 순서가 필요하다. 프로그램이 실행될때 CPU가 바로 기계어를 읽을 수 있어서 빠르지만 개발자가 코드 수정시 재컴파일 해야한다는 단점이 있다. 즉 자바의 특성을 이해하면 알 수 있다.핫 리로드 서버를 껐다 켜지 않아도 코드 수정이 즉시 반영되게 하는 개발 환경 설정장점코드 저장 순간 인텔리제이가 자동 빌드, 변경된..
[Java] 프로그래머스 햄버거 만들기 문제 설명햄버거 가게에서 일을 하는 상수는 햄버거를 포장하는 일을 합니다. 함께 일을 하는 다른 직원들이 햄버거에 들어갈 재료를 조리해 주면 조리된 순서대로 상수의 앞에 아래서부터 위로 쌓이게 되고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 따로 옮겨 포장을 하게 됩니다. 상수가 일하는 가게는 정해진 순서(아래서부터, 빵 – 야채 – 고기 - 빵)로 쌓인 햄버거만 포장을 합니다. 상수는 손이 굉장히 빠르기 때문에 상수가 포장하는 동안 속 재료가 추가적으로 들어오는 일은 없으며, 재료의 높이는 무시하여 재료가 높이 쌓여서 일이 힘들어지는 경우는 없습니다.예를 들어, 상수의 앞에 쌓이는 재료의 순서가 [야채, 빵, 빵, 야채, 고기, 빵, 야채, 고기, 빵]일 때, 상수는 여섯 번째 재료가 쌓였을 때, 세..

728x90
반응형