Framework 30

android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: AAPT: error: file failed to compile.

플러터로 개발하면서 앱 로고를 변경하고 안드로이드로 빌드하는 과정에서 오류가 발생했다.res파일 밑에 mipmap파일들 밑에 내가 사용하려는 새로운 로고들을 png로 넣고 실행했는데, 어째서인지 인식을 못하고 있었다.> Task :app:mergeReleaseResources FAILEDFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':app:mergeReleaseResources'.> Multiple task action failures occurred: > A failure occurred while executing com.android.build.gradle.internal.res.Aapt2..

Framework/Flutter 2024.07.08

EC2 인스턴스 갑자기 멈추는 문제 해결

AWS EC2에서 스프링부트 서버가 잘 실행되다가 갑자기 CPU사용량이 미친듯 올라가고 뻗는 문제가 발생했다.인스턴스를 중지했다가 재실행해도 문제는 해결되지 않았다. 하지만 로컬에서 컨테이너를 띄워 확인해볼 때 내 코드상에는 큰 문제가 없었고, 인스턴스를 완전히 종료한 뒤 다시 생성해서 해결할 수 있었다... CPU가 90가까이 사용량이 올라가면서 ssh 콘솔 접속도 되지않아서 너무 무서웠는데,찾아보니 인스턴스의 하드웨어 문제로 종종 이런일이 있는 것 같다. 인스턴스를 중지할때는 EBS 볼륨은 그대로 두기 때문에 하드웨어 상의 문제가 해결되지 않았고,인스턴스를 종료하고 재생성함으로써 볼륨을 삭제하고 재 생성하면서 해당 문제를 해결할 수 있었던 것 같다! 참고한 링크는 아래와 같다.https://brunc..

Framework/AWS 2024.07.07

InvalidDataAccessApiUsageException : detached entity passed to persist

JPA 엔티티가 영속성 컨텍스트에서 분리된 상태에서 persist를 호출해서 영속성 컨텍스트에 저장하려고 하니 발생한 오류다.memberPostRepository.saveAndFlush 메서드를 사용하여 MemberPost 엔티티를 영속성 컨텍스트에 저장해서 해결했다.2024-06-28T17:10:50.080+09:00 DEBUG 5097 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: com.backend.kiri.domain.MemberPost]20..

스프링부트 엔드포인트 무한루프 오류 (NoHandlerFoundException)

스프링부트로 프로젝트를 만들다가 완전 무섭게 생긴 오류를 만났다..... 아놔 완전 무시무시하다.. !ㅁ! 무엇보다 무한루프에 컴퓨터가 뻗어서 제대로 된 로그 확인이 어려웠고, 디버깅을 했더니 코드가 타고타고 저기 심해 바닥까지 내려가서 디버깅으로는 원인을 제대로 파악할 수 없었다...그래서 일단 이것저것 시도해봤다. 1. JPA 양방향 연관관계에서 순환참조가 발생해서 생긴 문제일까? 1-1 양방향 관계를 가지는 엔티티에서 toString 메서드를 사용하면 무한 루프가 발생할 수 있다!> 롬복 사용없이 toString메서드 오버라이딩해서 순환참조를 피해보았으나 실패 1-2 잭슨 라이브러리를 사용하는 해결 방법이 있다고 한다.> @JsonManagedReference와 @JsonBackReference를 ..

Springboot+JPA 사용중 발생한 N+1 문제 개선

개인프로젝트에서 만든 조회 api에 아주 심각한 성능 문제가 있었다. 바로 조회 한번에 select쿼리가 약 10개~15개가 나가는 것이다...... 문제의 쿼리 덩어리가 날아가는 부분을 찾기 위해 디버깅을 해보니 원인을 파악할 수 있었다. 현재 Member엔티티와 Post엔티티가 다대다여서 MemberPost라는 중간 객체를 두고 필요한 정보를 이 객체를 통해 조회하고있는데, 이를 불러오는 과정에서 문제가 발생하는 것 같았다. 아래는 개선 전 도메인 코드이다. @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String nickname; p..

Framework/JPA 2024.03.14

Springboot + jwt + web socket(STOMP) 채팅 구현

스프링부트로 채팅을 구현하기 위해 STOMP 프로토콜을 사용해보기로 했다. 구현을 위해 공부하는 과정에서 헷갈렸던 부분이 있어 적어둔다. STOMP(Simple Text Oriented Messaging Protocol)란 http와 호환되는 양방향 통신을 제공하기 위한 프로토콜이다. @RequiredArgsConstructor @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { private final StompHandler stompHandler; @Override public void configureMessageBroker(Message..

Flutter에서 json 파일 사용하기 - dynamic to String

Flutter 프로젝트 내부에서 json 파일을 사용할 때 값이 String이 아닌 dynamic으로 들어가면서 생긴 오류가 있었다. { "01호선": [ "중동", "도화", "간석", "개봉", "방학", "금정", "동암", "오산", // 등등 ], "02호선": [ "이대", "홍대입구", "건대입구", "구로디지털단지", "용두", "합정", ], // 등등... } 내가 사용하고자 하는 json파일은 대충 이렇게 생겼다! String jsonString = await rootBundle.loadString('asset/jsons/subway_stations.json'); final Map lineAndStations = json.decode(jsonString); selectedLine = ..

Framework/Flutter 2024.02.08

토큰 재발급 요청이 중복으로 나가는 문제 - 요청 대기열 만들어 해결

개인 프로젝트를 위한 플러터 앱에서 Dio Interceptor를 사용해서 토큰 에러가 나면 토큰 재발급을 위한 api로 요청을 보내 토큰을 재발급받는 로직으로 처리하고 있었다. 그런데 앱을 테스트할 때, 프론트에서 토큰 재발급 요청이 중복으로 날아가 서버에서 SQLIntegrityConstraintViolationException 이 발생하였다. 새로 생성된 refreshToken이 저장되는 과정에서 Duplicate entry 문제가 발생한 것인데, 로그를 찍어보니 프론트 상에서 토큰이 필요한 api를 중복으로 보낼때 적절한 처리가 되어있지 않아서 발생한 문제 같았다. 만약 인증이 필요한 여러 api를 호출하였는데, accessToken이 만료된 경우, 이 각 호출들이 Interceptor에서 같은 ..

Framework/Flutter 2024.02.06

io.jsonwebtoken.MalformedJwtException: Invalid compact JWT string: Compact JWSs must contain exactly 2 period characters, and compact JWEs must contain exactly 4.

Spring security와 jwt를 이용해서 토큰 재발급 api를 구현하고 프론트엔드와 연동해서 테스트하던중 오류가 발생했다. 로그인 과정에서 첫 토큰 세트(accessToken + refreshToken)는 발행이 잘되는데 재발급이 안되는 것이다. 일단 내가 생각했던 토큰 발급 로직은 이렇다. - 첫번째 토큰 발급 1. 클라이언트가 아이디, 패스워드를 /login 으로 넘긴다. 2. 내가 사용하는 로그인 필터가 spring security의 UsernamePasswordAuthenticationFilter를 상속하므로 그 정의에 따라서 /login경로로 들어온 요청을 해당 필터에서 검증함. 3. 검증하고 문제가 없으면 accessToken, refreshToken을 발급해서 헤더에 담아 클라이언트에..

SpringBoot&JPA : CommandAcceptanceException

스프링부트 프로젝트에서 JPA 엔티티를 만들고 데이터베이스에 반영하려고 하는데 이런 오류가 났다. 로그를 보다보니 Caused by: java.sql.SQLSyntaxErrorException이라고도 하고.. 그래서 순간 sql 예약어가 있나 하는 생각이 쎄하게 들었고 찾아봤더니 이게 맞다고 한다... .. https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-detailed-U MySQL :: MySQL 8.0 Reference Manual :: 9.3 Keywords and Reserved Words 9.3 Keywords and Reserved Words Keywords are words that have significance in..