전체 글(344)
-
[Golang] new, make, pointer 탐구
목차 1. new 키워드 2. 틈새 포인터 설명 3. 키워드 4. 요약 Go 언어의 new 와 make 는 새로운 데이터 구조를 생성한다는 공통점이 있지만 적용할 상황과 대상이 다른다. 둘의 공통점과 차이점을 비교하여 어느 상황에 적합하게 사용할 수 있는지 알아보고, 더불어 알게된 포인터 지식도 같이 정리해본다. new 키워드 사용 목적 new 는 주로 기본 데이터 타입(원시 타입)의 포인터를 할당할 때 사용된다. 즉 새로운 인스턴스를 할당하고 해당 인스턴스의 포인터를 반환한다. new 는 메모리 할당 후 제로값으로 초기화된 포인터를 반환하며, new 로 생성된 값은 0 또는 nil 값으로 초기화 된다. var k *int k = new(int) fmt.Println("k: ", k, " *k: ", *..
2024.01.07 -
[Java] LocalDateTime toString() 00초 일 때 발생한 문제
문제 상황 알림 메시지 테스트 중 발견한 문제. 가장 최근도착한 알림의 활동 시간(ex. n초 전, n시간 전)이 업데이트되지 않는 현상을 발견했다. 앱을 껐다 켜도 여전히 가장 최신 알림의 0초 전은 변하지 않았다. 곧바로 해당 알림이 적재된 테이블을 확인했다. 해당 시간은 테이블의 데이터가 생성되는 순간(created_date) 를 기준으로 표시된다. 위의 하이라이트 된 부분이 문제의 알림 데이터다. 해당 데이터베이스는 mysql 을 사용중이고 created_date 컬럼은 datetime 타입이다. 솔직히 해당 데이터의 초단위(00)를 보자마자 느낌이 싸했다. 설마.. 해당 데이터가 api response 로는 어떤 형태로 나가는지 확인하면, 대충 아래 이미지다. 초가 생략된 문자열이 나가기 때문에..
2024.01.05 -
[Kafka 에러] LEADER_NOT_AVAILABLE
상황 카프카 클러스터 구축 중 발생한 에러. 도커 컴포즈를 활용해 브로커 3대, 주키퍼 1대 조합으로 카프카 클러스터를 구성했다. 브로커 내부에서 kafka-console-producer 로 topic 에 메시지를 발행했는데 에러가 발생했다. 에러 메시지 WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 3 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient) 원인과 해결 메시지를 발행하고자 한 토픽이 아직 생성되지 않았기 때문에 발생한 에러였다. 도커 컴포즈 yml 작성 시 아래 옵션을 true 로 설정하면 토픽이 자..
2024.01.04 -
[Java] 문자 이스케이스 처리하기 (feat.html)
자바/스프링부트 환경에서 html 템플릿을 다루던 중 내부 문자열에서 특수 문자를 사용하는 부분에서 에러가 발생했다. 문제가 된 특수문자는 &(ampersand) 였다. 해당 기호가 포함된 문자열을 파싱하지 못했고 html 의 이스케이프 문자로 별도 처리가 필요하단 걸 알게 됐다. 이스케이프 문자란 HTML 문서에서 특별한 의미를 가지는 문자를 표현하기 위해 사용되는 특수 문자를 의미한다. 이스케이프 문자를 사용하면 특정 문자가 HTML 태그나 엔티티로 인식되지 않고 텍스트 그 자체로 표현할 수 있다. 가장 일반적으로 사용되는 HTML 이스케이프 문자는 다음과 같다: : > 기호를 텍스트로 표현할 때 사용 & : & 기호를 텍스트로 표현할 때 사용 " : "..
2023.12.29 -
[Java] 안전하게 파일 삭제하기
목차 1. File.delete() 2. Files.delete() 3. 해당 파일이 존재하는 디렉토리(폴더)까지 모두 삭제 자바에서 메모리에 존재하는 파일을 삭제하는 방법을 알아보자. 안전하게 파일을 삭제하고 해당 파일이 존재하는 폴더 내부를 모두 삭제하는 방법까지 알아보겠다. 1. File.delete() 가장 간단하게 File 클래스에 존재하는 delete method 를 직접 호출하는 방법이 있다. File 인스턴스에서 직접 delete() 를 호출하는 방법이다. public class SimpleTest { @Test public void FILE_SIMPLE_DELETE() { File file = new File("./test"); file.delete(); } } 해당 delete() 메서..
2023.12.22 -
[Spring] @Async 비동기 동작 원리 파헤치기
목차 - 서론 - @EnableAsync 동작원리 - @Async 동작원리 - 결론 실습 환경 - Java 17 - Springboot 3.2.0 서론 실무에서 비동기 처리를 위해 CompletableFuture 클래스를 사용했다. 잘 동작하는 것을 확인했지만 문득 @Async 어노테이션을 이용하면 더 편리하지 않을까 하는 생각과 @Async는 어떤 원리로 비동기를 처리하는지 궁금해졌다. @Async 내부 동작을 디버깅 한 결과 결국 @Async 역시 CompletableFuture을 사용하고 있었다. 이 글에서는 스프링부트에서 @Async 어노테이션이 붙은 메서드가 어떻게 비동기로 처리되는지와 더불어 @EnableAsync 가 어떻게 동작하는지를 다뤄보겠다. @EnableAsync 동작원리 @Enabl..
2023.12.21 -
[글또 9기 첫 글] 방황하는 3년차의 다짐글
어느덧 네 번째 글또에 참여한다. 첫 제출 글을 다짐글로 제출하던 기수와 그렇지 않은 기수의 태도 차이가 많이 났는데, 다짐 글을 쓰지 않았던 7기는 아쉬움을 남긴 채 마무리한 기억이 난다. 거창한 다짐보다는 9기에선 어떤 글을 쓰고 싶은지, 커뮤니티에 어떻게 기여할 수 있는지 생각해본다. 여전히 No Pass를 목표로, 근데 이제 퀄리티를 곁들인. 8기땐 한 번의 패스도 사용하지 않고 모든 회차에 글을 제출할 수 있었다. 그렇게 할 수 있었던 동력을 생각해 보면 아무래도 규율과 제도라는 반강제적인 장치가 큰 역할을 해주었다. 10만 원이라는 나름 큰(?) 선납금을 까이고 싶지 않았고, 오프라인 모임을 그렇게 열심히 참여하는데 막상 글을 제출하지 않는 아이러니를 범하고 싶지 않았다. 무엇보다 패스를 사용..
2023.12.10 -
AWS SAA-C03 합격 후기
SAA를 취득했다. SAA는 Solutions Architect - Associate를 의미하며, AWS 서비스로 클라우드 아키텍트 설계 지식을 입증할 수 있다. 이다음 단계 시험은 SAP(Solutions Architect - Professional)인데 Associate에서 Professional로 레벨 업 함을 의미한다. 기왕 자격증 사냥을 시작했으니 SAP까지 취득하고 싶다. 사실 자격증이 없어도 실무를 보는덴 아무 문제 없지만, 향후 DevOps 전직도 고려 중이기에 자격증 취득도 필요한 과정이라 생각했다. 백엔드 커리어를 계속 이어간다고 해도 AWS는 꾸준히 공부해두면 유용할 테니 차근차근 단계를 밟아 나가야겠다. 공부 자료 - Udemy SAA-C03 이론 강의 https://www.udem..
2023.09.17 -
IntelliJ 한글 입력시 경고 끄기 (Non-ASCII characters in an identifier)
테스트 코드 작성시 한글을 사용하는 경우가 종종 생기는데 (사실 많이), 그럴 때마다 non-ascii characters 에 경고가 생긴다. 거슬리니까 제거하도록 하자. MacOs IntelliJ 기준으로 Settings > Editor > Inspections > Internationalization > Non-ASCII charaters 로 들어가자. 아래 이미지에서 보이는 Report Non-Ascci Charaters In: Identifiers 의 체크박스를 해제해주자. warning 이 말끔히 사라진 것을 확인할 수 있다 (편안~)
2023.08.21