NGinX 심볼릭 링크 트러블슈팅

문제 상황 절대 경로에서 NGinX를 재부팅하면 정상 동작했지만, 심볼릭 링크를 통해 기존 설정 서버 내부 NGinX의 설정(Config)에 특정 Server를 추가하는 작업을 수행중이었습니다. 다음과 같이 같이 NGinX의 Server 별로 sites-available파일을 생성 후, sites-enabled에 심볼릭 링크를 생성 후 연결하였습니다. # NGinX 파일서버 블록 생성 vi sites-available/file-server # 파일서버 블록 내용 작성 # 심볼릭 링크 연결 ln -s sites-enabled ./sites-available 이후 다음과 같이 nginx.conf 파일에 링크 파일(sites-enabled)을 추가했습니다. http { # ..(생략).. include sites-enabled/*; } 문제 해결 다음 스택오버플로우 게시글을 보고 문제 상황을 유추해볼 수 있었습니다. 심볼릭 링크 이해 References URL 게시일자 방문일자 작성자 Stack Overflow 2013.08.06. 2025.01.10 iamyojimbo GeeksForGeeks 2020.10.09. 2025.01.10. GeeksForGeeks

2025. 3. 11. · 1 분 · 100 단어 · Leaf

[DNS] 가비아 도메인으로 Vercel 홈페이지 배포 시 SSL 인증서 만료 해결

상황 최근, Vercel을 활용해서 배포한 홈페이지에서 SSL 인증서 만료 관련 문구가 발생했습니다. 인증서 만료일자가 오늘 이전이라 크롬으로 홈페이지 접속이 거부되었습니다. 원래 Vercel에서 자동으로 인증서를 갱신하게 되어있는데, 갱신되지 않아서 만료가 되었습니다. 원인 위 페이지 하단에서 다음과 같은 문구를 발견할 수 있었습니다. 도메인 설정이 잘못되면, 갱신이 되지 않을 수 있습니다. 도메인이 잘못 구성되어 있으면 인증서가 갱신되지 않을 가능성이 높습니다. 도메인의 구성 상태를 확인하려면 프로젝트 설정(Project settings)으로 이동한 후 도메인 섹션(Domains section)으로 이동하면 됩니다. ...

2024. 11. 20. · 2 분 · 383 단어 · Leaf

[Java] JPA detached entity passed to persist 오류 해결하기

상황 JPA를 사용해서 엔티티를 저장하는 로직에서 종종 발생하는 오류입니다. 저는 DataJpaTest를 작성하다가 em.persist(member) 메서드를 실행하면 발생했습니다. 오류 메시지 detached entity passed to persist오류 메시지는 다음과 같습니다. detached entity passed to persist: pull_up.infra.database.entity.Member jakarta.persistence.EntityExistsException: detached entity passed to persist: pull_up.infra.database.entity.Member at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:126) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:167) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:173) at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:763) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:741) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:569) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:319) at jdk.proxy3/jdk.proxy3.$Proxy148.persist(Unknown Source) at pull_up.global.entity.BaseEntityTest.testCreateAt(BaseEntityTest.java:35) at java.base/java.lang.reflect.Method.invoke(Method.java:569) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: pull_up.infra.database.entity.Member at org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:88) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:77) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:54) at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:757) ... 11 more 해석하기 오류 메시지(detached entity passed to persist)를 그대로 해석하면 다음과 같습니다. ...

2024. 11. 18. · 3 분 · 485 단어 · Leaf

[Java]String에서 공백 제거하기

공백 제거의 필요성 자바로 웹개발을 하다 보면, 입력값에 들어온 공백(White space)을 제거해야 할 일이 심심치 않게 있습니다. 특히, UTF-8에는 다음과 같은 다양한 공백이 있기 때문에 모든 경우의 수에 대응해야 합니다. U+0020 : 일반 스페이스 U+0009 : 탭(\t) U+000A : 줄 바꿈(\n) U+000D : 캐리지 리턴(\r) U+000C : 폼 피드(\f) U+3000 : 넓은 공백 공백 제거하기 String.trim() JDK 1.0부터 존재한 역사가 있는 메서드로, 문자열 앞뒤의 아스키 공백1을 내부 char배열에서 제거합니다. 문자열 가운데는 제거하지 않으며, 나머지 유니코드 공백도 제거하지 않습니다. ...

2024. 11. 16. · 2 분 · 306 단어 · Leaf

MockMvc Object mapper nested class utf-8 인코딩 오류 해결하기

상황 Controller 테스트 작성 시 mockMvc의 결과가 원하는 값과 일치하는지 확인하는 상황입니다. @Test @DisplayName("[인수] 읽지 않은 알림 요청 시 전체응답(200)") void testAllNotifications200() throws Exception { // given Cookie[] followingUserLoginCookie = mockMvc.perform(get("/api/users/login").header(HttpHeaders.AUTHORIZATION, "Bearer valid_token_2")).andReturn().getResponse().getCookies(); Cookie[] myLoginCookie = mockMvc.perform(get("/api/users/login").header(HttpHeaders.AUTHORIZATION, "Bearer valid_token")).andReturn().getResponse().getCookies(); // when // following -> user 팔로우 mockMvc.perform(post("/api/users/" + me.getId() + "/follows").cookie(followingUserLoginCookie)); // notifications 전체 조회 String responseBody = mockMvc.perform(get("/api/users/notifications").cookie(myLoginCookie)) .andExpect(status().is(200)).andReturn().getResponse().getContentAsString(); ListDto<List<NotificationDto>> notificationDtos = objectMapper.readValue(responseBody, new TypeReference<ListDto<List<NotificationDto>>>() {}); // then assertThat(notificationDtos.getList()).hasSize(1); assertThat(notificationDtos.getList().get(0).getDescription()).isEqualTo("leaf2님이 당신을 팔로우합니다."); } 테스트 결과 junit 테스트 결과(실패) ...

2024. 5. 7. · 2 분 · 222 단어 · Leaf

Org.springframework.data.mapping.MappingException 오류 해결

상황 SpringBoot에서 MongoDB에 데이터를 저장하고, 저장한 데이터를 파싱하는 과정에서 다음과 같은 오류가 발생했습니다. 실행 코드 // 몽고DB 컬렉션 클래스 @Document(collection = "indicators") @Getter @NoArgsConstructor @Builder @AllArgsConstructor @Slf4j public class Indicator { @Id private String id; private List<MatchIndicator> matchIndicators; private MatchIndicatorStatistics matchIndicatorStatistics; // 메서드 생략 } // 컬렉션 조회 메서드 @Override public Indicator getIndicatorInDB(String SummonerId) { Query query = Query.query( Criteria.where("_id").is(SummonerId)); Indicator indicators = mongoTemplate.findOne(query, Indicator.class, "indicators"); if (indicators == null) throw new RiotDataException(RiotDataError.NOT_IN_STATISTICS_DATABASE); else log.info("indicator founded : {}", indicators.getId()); return indicators; } 오류 코드 Parameter org.springframework.data.mapping.Parameter@691d29ad does not have a name 원인 분석 실제로 MongoDB에서 데이터를 정상 꺼내오는 로그는 다음과 같이 잘 찍혀있었습니다. ...

2024. 4. 2. · 2 분 · 371 단어 · Leaf

Lombok 생성자 주입 시 인터페이스 주입하기

인터페이스 생성자 주입 스프링에서는 의존성을 주입받는 다양한 기능이 있습니다. 그중 가장 많이들 사용하시는 롬복을 활용한 생성자 주입은 다음과 같습니다. @RequiredArgsConstructor @Service public class MyService { private final MyRepository myRepository; } // 빌드 시 lombok의 @RequiredArgsConstructor에 의해 추가되는 코드 public MyService(MyRepository myRepository) { this.myRepository = myRepository; } 하지만 주입받아야 하는게 인터페이스1라면 어떻게 의존성을 주입받을 수 있을까요? 인터페이스의 구현체가 1개라면 문제가 없지만, 여러개 있다면 문제가 됩니다. 스프링이 어떤 Bean을 주입해야 할지 선택하지 못하기 때문입니다.(결정장애) ...

2024. 3. 29. · 2 분 · 346 단어 · Leaf

Jnuit 테스트에서 객체 필드명 비교하기

상황 기존 코드를 리팩토링하는 과정에서 엔티티 객체에 있던 @Data를 @Getter로 변경중이었습니다. 테스트를 위해 임시로 @Data를 붙여놓고 사용중이었습니다. @Getter // 기존 : @Data @Builder @AllArgsConstructor public class LaneInfo { private TeamPosition teamPosition; private boolean isBottomLane; private int myTeamId; private int myLaneNumber; private int oppositeLaneNumber; private int myBottomDuoNumber; private int oppositeBottomDuoNumber; //...(생략) } 기존에 잘 동작하던 아래 테스트에서 오류가 발생했습니다. //생략 // matchIndicator가 가진 laneInfo와 given에서 주어진 laneInfo 비교 assertThat(matchIndicators.get(0) .getMetadata() .getLaneInfo()) .isEqualTo(laneInfo); 원인 분석 오류 로그는 다음과 같았습니다. Expected :com.ssafy.matchup_statistics.indicator.entity.match.LaneInfo@1150d471 Actual :com.ssafy.matchup_statistics.indicator.entity.match.LaneInfo@6393bf8b 해당 테스트코드는 기존에는 잘 동작했고, 각 필드가 하나라도 달라지면 실패하던 테스트코드였기에 원인이 궁금했습니다. ...

2024. 3. 23. · 2 분 · 335 단어 · Leaf

Springboot Junit 단위테스트에서 로그 레벨 조정하기

로그레벨 변경하기 단위테스트에서 간단하게 로그 레벨을 변경할 수 있습니다. 통합테스트는 @SpringBootTest를 사용하면 /src/test/resources/application.properties에 있는 설정정보를 자동으로 불러오지만, 단위테스트에서는 해당 어노테이션이 너무 무겁기 때문에 사용할 수 없습니다. 바로 코드로 알아보겠습니다. // 단위테스트가 필요한 클래스 내부에 해당 코드를 추가하면 완료입니다. import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; @BeforeAll public void setLogLevel() { final Logger logger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); logger.setLevel(Level.ALL); } 간단히 코드를 설명드리자면, 단위테스트 시작 전 LoggerFactory로 새로운 loogger를 생성하고 레벨을 변경한 후 테스트를 수행하기 위한 코드입니다. ...

2024. 3. 20. · 1 분 · 106 단어 · Leaf