Dev./Error.(15)
-
[Error] Port 8080 was already in use
문제새로운 스프링 프로젝트 테스트 실행시 다음과 같은 오류가 콘솔창에 뜸Port 8080 is already in useIdentify and stop the process that's listening on port 8080 or configure this application to listen on another port.8080 포트를 이미 다른 프로세스에서 사용 중이라는 뜻나는 분명 이전 프로젝트 서버를 껏는데?이전 프로젝스 서버 죽이고 새로운 프로젝트를 실행했다.개발 중 의도치않게 포트가 점유된 상태로 서버가 백그라운드로 남는 경우가 종종 있다고 한다.appication.properties 파일에서 포트를 예를들어 8081 로 바꿔줄수도 있지만 정석대로 원인을 해결하는 방법으로 정함.상황 진단터..
08:46:30 -
[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..
2025.11.08 -
[Error] JPA 양방향 연관관계에서 무한 루프문제 해결
문제단건 조회시 해당 엔티티에 딸린 댓글들을 가져올 때 엔티티를 그대로 반환하면서 무한 루프 문제가 발생했다.Todo와 Comment는 서로 양방향 연관관계로 연결되어있다. 원인@RestController는 반환값을 자동으로 JSON 직렬화한다고 한다. 그때 양방향 연관관계에서 Jackson이 Todo 객체를 JSON으로 변환하려 함Todo 내부의 comments를 직렬화하려 함각 Comment는 다시 todo를 가지고 있어서 Todo 직렬화 시도Todo → Comment → Todo → Comment … 🔁와 같은 순환문제가 발생한다. 즉, 객체가 서로를 참조하고 있어서 JSON 변환이 무한 루프에 빠지는 것해결해결방법은 여러가지가 있다고 하는데 나는 @JsonManagedReference / @Js..
2025.11.06 -
[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는 단순히 데이..
2025.11.05 -
[Error] 자바에서 객체의 동등성과 동일성 문제
상황 요약Cart 클래스에서 Map 구조로 장바구니 관리.MenuItem은 이름(name)과 가격(price)을 가진 단순한 객체.같은 메뉴 이름을 여러 번 담을 때 수량이 합쳐져야 하는데, 서로 다른 MenuItem 인스턴스로 인식되어 중복 저장되는 문제가 발생할 수 있음.MenuItem m1 = new MenuItem("Americano", 2000);MenuItem m2 = new MenuItem("Americano", 2000);cart.addCartItem(m1, 1);cart.addCartItem(m2, 1); // ❌ 중복 추가됨 원인 분석자바에서 HashMap은 Key를 비교할 때 동일성(==)이 아니라 동등성(equals)을 사용하지만 다음과 같은 두 단계가 필요하다hashCode() →..
2025.10.29 -
[Error] 키오스크 트러블 슈팅 3 - 장바구니 구조 설계
[Error] 키오스크 트러블 슈팅 1 - 상태 패턴enum 상수과 switch문으로 관리하던 상태에서 상태 패턴 적용 해보는 것도 괜찮을 것 같다고 하셔서 검색 후 내 코드에 적용해 보았다. 기존에 키오스크 실질적인 기능을 담당하는 start() 메소드가devz0.tistory.com [Error] 키오스크 트러블 슈팅 2 -책임 분리이전 글에서 이어지는 내용 [Error] 키오스크 트러블 슈팅 1enum 상수과 switch문으로 관리하던 상태에서 상태 패턴 적용 해보는 것도 괜찮을 것 같다고 하셔서 검색 후 내 코드에 적용해 보았다. 기devz0.tistory.com오래되긴 했지만 API 만들어본 경험이 있어서 과제 로직 구현 자체는 어렵지 않았다. 객체 지향 적인 코드 흐름 문제 제외하고 가장 생..
2025.10.28 -
[Error] 키오스크 트러블 슈팅 2 -책임 분리
이전 글에서 이어지는 내용 [Error] 키오스크 트러블 슈팅 1enum 상수과 switch문으로 관리하던 상태에서 상태 패턴 적용 해보는 것도 괜찮을 것 같다고 하셔서 검색 후 내 코드에 적용해 보았다. 기존에 키오스크 실질적인 기능을 담당하는 start() 메소드가devz0.tistory.com키오스크 프로그램을 작성하면서 상태패턴을 도입했다.Kiosk 클래스가 State를 관리하고, 각 상태(START, MAIN_MENU, SUB_MENU, CART, ORDER)는 사용자의 입력에 따라 다음 상태로 전이된다.초기 설계에서는 Kiosk 내부에서 상태 전이(currentState = State.MAIN_MENU)를 직접 수행했지만,점차 책임 분리의 중요성을 알게되며 로직을 수정하다 State와 Kios..
2025.10.27 -
[Error] 키오스크 트러블 슈팅 1 - 상태 패턴
enum 상수과 switch문으로 관리하던 상태에서 상태 패턴 적용 해보는 것도 괜찮을 것 같다고 하셔서 검색 후 내 코드에 적용해 보았다. 기존에 키오스크 실질적인 기능을 담당하는 start() 메소드가 굉장히 길었는데 그 부분은 간략하게 생략되었지만 고려해봐야할 몇가지 문제가 생겼다. 그 과정을 정리해보려고 한다.목표기존 enum + switch 구조에서 상태 패턴(State Pattern)을 적용하여 Kiosk 클래스의 start 메소드 단순화 및 코드 재사용성 향상을 시도상태 패턴 적용 후 장점 start() 메소드가 간단해지고, 상태 전환 로직이 상태 객체로 분리됨.상태별 클래스(StartState, MainMenuState, ...)를 독립적으로 관리 가능 → 재사용성, 확장성 향상.새로운 ..
2025.10.25 -
[Error] 계산기 만들기 트러블 슈팅
기능 구상Level1. 클래스 없이 만드는 계산기양의 정수 2가지 , 사칙연산기호 한가지 입력양의정수는 각각 하나씩 입력, 정규식 검사 후 int 타입으로 변수에 저장사칙연산 기호는 char 타입으로 변수 저장연산 진행switch문을 사용해 각 연산자에 맞게 진행나눗셈 연산에서 두번째정수에 0이 입력될 경우 오류 출력exit 문자열 입력 전까지 계산 진행각각의 인풋값 입력단계에서도 exit 입력시 연산 끝낼 수 있도록 로직 작성각각의 계산이 종료될때도 exit 입력할 수 있도록 작성대소문자 관계없이 비교하는 String.equlsIgnoreCase를 발견해서 적용Level2. 객체 지향 계산기기능으로 클래스 분리 Calculator 클래스사칙연산 수행인풋값 입력시 검증 메소드결과값 반환, 연산 결과 리..
2025.10.17 -
[Error] incompatible types: Object[] cannot be converted to String[]
ArrayList 타입을 String[] 배열로 변환해 리턴하는 과정해서 발생했다. import java.util.*;class Solution { public String[] solution(String[] strArr) { ArrayList answer = new ArrayList(); for (String str : strArr) { if (!str.contains("ab")) { answer.add(str); } } // !!문제 구간!! ArrayList -> String 배열 변환 String[] str_arr = answer.toArray(); r..
2025.10.13