공지

전체 글

63건

포켓몬 포코피아 익스팬션 패스 공개 - 8월 무료 다이브 업데이트와 유료 보글보글 해저 마을 총정리

8월에 익스펜션 업데이트 정보를 가지고 와봤습니다🥰 유료/무료 업데이트로 구분되어 있고,유료 업데이트는 무려 3번에 걸쳐서 업데이트가 된다고 하네요 ㅎㅎㅎ 무료 업데이트는 바로 수중 이동 기술인 다이브,그리고 다른 하나는 패스를 사야만 들어갈 수 있는 유료 신규 지역 보글보글 해저 마을 이 둘을 헷갈려서 "돈 안 내면 물속 콘텐츠 자체를 아예 못 하는 거 아니냐" 고 오해하는 반응이 꽤 있길래, 뭐가 무료고 뭐가 유료인지부터 자세히 알아보겠습니다.1. 무슨 일이 있었나?2026년 6월 9일, 닌텐도 다이렉트에서 유료 확장 콘텐츠인 익스팬션 패스가 공개되었고, 판매는 6월 10일부터 시작되었다.패스 자체는 지금 사둘 수 있지만 실제 콘텐츠가 열리는 시점은 8월이다. (8월이 아직 멀게만 느껴지는...) ..

2026.07.15 · 댓글

[팰월드] 2년 반 만에 정식 출시 및 v1.0 대규모 업데이트 - 닌텐도 소송은 왜 흐지부지되고 있나

팰월드는 2026년 7월 10일 얼리엑세스를 끝내고 1.0으로 정식 출시했고 그 무렵 닌텐도가 걸었던 소송은 사실상 팰월드 쪽으로 기울어 있다. 게임이 막힐 가능성은 거의 없고, 닌텐도가 이겨봐야 손에 쥐는 게 3만 달러 남짓이라는 이야기까지 나온다.한동안 "표절 게임인데 곧 서비스 종료되는 거 아니냐"는 말이 따라다녔던 게임이라 정식 출시와 소송 근황을 한 번에 정리해 둘 만하다. 각각 어떤 상황인지 사실 위주로 뜯어보자.얼리엑세스에서 1.0으로 - 2년 반 만의 정식 출시팰월드는 2024년 1월 얼리엑세스로 세상에 나왔다. 출시 직후 스팀 동시접속 200만 명을 넘기며 화제를 만들었고 그 뒤로 약 2년 6개월을 얼리엑세스 딱지를 단 채 업데이트를 이어갔다. 그리고 2026년 7월 10일, 마침내 정식..

2026.07.13 · 댓글

[팰월드] 1.0 대규모 신규 업데이트 총정리 (PalWorld v1.0 패치노트)

팰월드가 드디어 얼리엑세스를 끝내고정식 출시를 하면서 대규모 업데이트를 진행해서 해당 내용을 좀 정리해봤습니다. 패치 내용을 보면 신규 팰 72종이 추가되었고, 총 287종이라고 하네요.정말 많이 늘었네요😯 패치 내용을 하나씩 살펴봅시다!! AI 번역본이라 실제 게임 용어와 차이가 있을 수 있습니다. 참고해서 봐주시면 감사합니다!1. 신규 지역 및 월드 개선1-1. 선리치이제 땅만이 아닌 하늘에도 섬이 생겼다고 하네요..신규 팰, 타워 보스, 전용 장비로만 채굴 가능한 광석 등 다양한 신규 콘텐츠가 추가되었다고 합니다! 저도 아직 못가봤는데 빨리 가보고 싶네요 ㅎㅎ 1-2. 월드 트리게임을 해보시면 아시겠지만 나무가 정말 커서 잘 보입니다. 저는 걸어서, 헤엄쳐서 가려다가 실패했지만... 1-3. 새로..

2026.07.13 · 댓글 1

체크 예외를 던졌는데 회원 데이터가 롤백되지 않았다 - @Transactional 기본 롤백 정책과 rollbackFor

@Transactional을 붙여두면 메서드 안에서 예외가 터졌을 때 알아서 롤백해줄 거라고 막연히 믿고 있었다. 그런데 회원가입 로직에 정책 위반을 알리는 예외를 체크 예외(checked exception)로 만들어 던졌더니, 분명히 예외가 터졌는데도 회원 데이터가 그대로 커밋되어 있는 걸 발견했다.결론부터 말하면 @Transactional의 기본 롤백 규칙은 "예외가 터지면 무조건 롤백"이 아니라 "RuntimeException이나 Error가 터지면 롤백, 체크 예외는 롤백 안 함"이다. 이 글에서는 같은 회원가입 로직을 언체크 예외/체크 예외/rollbackFor 지정/rollbackFor 타입을 잘못 지정한 경우 네 가지로 나눠서 실제로 DB에 데이터가 남는지 직접 확인하고 왜 이렇게 동작하는지..

2026.07.10 · 댓글

@Transactional(readOnly = true)를 붙였더니 분명히 바꾼 값이 그대로 사라졌다 - 읽기 전용 트랜잭션과 Dirty Checking

조회 전용 메서드에는 @Transactional(readOnly = true)를 붙이라는 이야기를 많이 듣는다. 그런데 막상 이유를 물으면 "성능에 좋다더라" 정도로만 알고 넘어가는 경우가 많다. 나도 그랬다. 그래서 조회한 엔티티의 값을 실수로 바꿔놓고 저장까지 시켜버리는 버그가 있는 메서드에 readOnly = true를 붙이면 어떻게 되는지 직접 실험해봤다.결과부터 말하면, readOnly = true는 단순히 "이 메서드는 읽기만 한다"는 의미의 주석이 아니었다. 트랜잭션 안에서 조회한 엔티티의 필드를 바꿔도 커밋 시점에 저장이 안 됐고 save()를 명시적으로 다시 호출해도 마찬가지로 반영이 안 됐다. 반대로 새 엔티티를 저장하는 건 readOnly = true여도 정상으로 처리됐다. 여기서는 ..

2026.07.09 · 댓글

포인트 이력에서 회원 이름을 보려면 매번 따로 조회해야 했다 - @OneToMany 연관관계 매핑과 Jackson 무한 재귀

지난 글에서 회원가입할 때 웰컴 포인트를 같이 적립하도록 만들면서 PointHistory에 memberId라는 Long 컬럼을 하나 넣었다. 트랜잭션 경계를 확인하는 게 목적이라 이 정도로도 충분했는데, 막상 "이 포인트 이력이 누구 건지" 화면에 보여주려고 하니 문제가 생겼다. PointHistory 하나 가지고는 회원 이름도 이메일도 알 수 없고, 매번 memberId로 Member를 따로 조회해야 했다.결론만 이야기하면 이렇다. Long memberId는 그냥 숫자일 뿐이라 자바 코드 안에서 회원 객체로 바로 못 넘어간다. JPA의 @OneToMany/@ManyToOne으로 진짜 연관관계를 맺어주면 pointHistory.getMember().getName()처럼 객체 그래프를 그대로 타고 들어갈 ..

2026.07.08 · 댓글

회원가입은 됐는데 포인트가 안 쌓였다 - 서비스 계층 분리와 @Transactional 트랜잭션 경계

지금까지 만든 MemberController는 MemberRepository를 직접 호출하는 구조였다. 회원 하나 저장하는 정도는 이렇게 해도 문제가 없다. 그런데 "회원가입하면 웰컴 포인트 1000점을 같이 적립해준다"처럼 저장할 게 두 개로 늘어나면 이야기가 달라진다.결론만 이야기하면 이렇다. 컨트롤러에서 리포지토리 두 개를 순서대로 호출하면, 둘 중 하나가 실패해도 앞서 실행된 저장은 이미 커밋돼버릴 수 있다. 서비스 계층을 분리하고 @Transactional을 붙여야 "회원 저장 + 포인트 적립"이 하나의 단위로 묶여서 하나라도 실패하면 전부 롤백된다.말로만 하면 감이 잘 안 와서 일부러 실수 하나를 코드에 심어놓고 @Transactional 없이 실행해서 정말로 회원은 저장되고 포인트만 실패하는..

2026.07.07 · 댓글

Spring Data JPA findBy 쿼리 메서드로 조건 검색 만들기 — 메서드 이름만으로 SQL이 만들어지는 원리

JDK 21 LTS Spring Boot 3.3.4 MariaDB 10.11 MariaDB Connector/J 3.4.1 메서드 이름을 findByNameContaining처럼 정해진 규칙대로 지으면 Spring Data JPA가 SQL을 직접 만들어준다. 정확 일치·부분 일치·범위·정렬·조합·개수·존재 확인까지 6명의 실제 데이터로 검증했다. MariaDB의 LIKE는 기본적으로 대소문자를 구분하지 않는다는 것도 직접 확인했다.들어가며지난 글에서 JpaRepository를 상속하는 것만으로 저장·조회·수정·삭제가 전부 됐다. 그런데 "이름에 '길'이 들어간 회원만 찾고 싶다"거나 "나이가 25살 이상인 회원만 뽑고 싶다" 같은 조건은 JpaRepository가 기본으로 주는 메서드에 없다. f..

2026.07.06 · 댓글

Spring Boot에 MariaDB 연결하고 JPA로 첫 CRUD 만들기

들어가며지난 글에서 POST /members로 회원가입 API를 만들었다. 그런데 서버를 껐다 켜면 저장했던 회원이 전부 사라졌다. AtomicLong으로 id만 흉내 냈을 뿐, 진짜로 어딘가에 저장한 게 아니었기 때문이다.결론만 이야기하면 이렇다. MariaDB를 설치하고, Spring Data JPA로 Member 엔티티 하나를 만들면, 회원 저장·조회·수정·삭제가 전부 DB에 그대로 남는다. 서버를 껐다 켜도 데이터가 살아있는 것을 확인할 수 있다.curl -X POST http://localhost:8080/members \ -H "Content-Type: application/json" \ -d '{"name":"홍길동","email":"hong@example.com"}'{"id":1,"na..

2026.07.03 · 댓글

Spring Boot POST 요청 받기 — @RequestBody, 레코드, @Valid로 회원가입 API 완성하기

들어가며지난 글에서 GET /hello로 {"message": "Hello, Spring Boot!"}를 받아봤다. 이번엔 반대 방향이다. 브라우저 주소창이 아니라 클라이언트가 JSON을 보내고, 서버가 그걸 받아서 처리하는 쪽.결론만 이야기하면 이렇다. 이름과 이메일을 받는 회원가입 API를 만들고, curl로 JSON을 보내서 아래 응답을 받으면 끝이다.curl -X POST http://localhost:8080/members \ -H "Content-Type: application/json" \ -d '{"name":"홍길동","email":"hong@example.com"}'{"id":1,"name":"홍길동","email":"hong@example.com"}여기서 멈추지 않고 한 걸음 더 ..

2026.07.02 · 댓글