원래는 Obsidian에 Claude를 연결해서 써보고 싶었다.그런데 요즘 재정난으로 인해 이미 평소에 사용하고 있던 Codex를 더 적극적으로 활용하는 쪽으로 방향을 잡았다. 문제는 그동안 내가 찾았을 때는 Obsidian 안에서 Codex를 자연스럽게 연결하는 방법을 잘 못 찾았다는 점이었다.그래서 거의 포기하고 있었는데, 최근에 Obsidian 커뮤니티 플러그인 중 Codex Panel이라는 플러그인을 알게 됐다. 직접 연결해보니 생각보다 괜찮았다.Obsidian 안에서 Codex 패널을 열고, 현재 노트나 선택한 내용을 기준으로 정리·수정·질문을 할 수 있었다.게다가 Threads view를 열어서 왼쪽에 고정해두면, IntelliJ의 Codex 채팅방 목록처럼 기존 대화방을 어느 정도 관리할 수..
전체 글
업무자동화에 눈 뜬 2년차 백엔드 개발자 (Java, SpringBoot)외부 API 연동 작업 중 방화벽 등록을 위해 공인 IP를 요청받았는데,EC2 Public IP를 알려줬다가 NAT Gateway 환경에서는 실제 Outbound IP가 다르다는 걸 뒤늦게 알았습니다.같은 실수를 반복하지 않도록 정리했습니다.Inbound IP와 Outbound IP외부에서 우리 서비스에 접속할 때 사용하는 도메인/IP와, 우리 서버가 외부 API를 호출할 때 상대방에게 보이는 IP는 다를 수 있다. 이번에 확인해야 하는 값은 다음이다.운영 서버가 외부 API를 호출할 때 상대방에게 보이는 출발지 공인 IP즉, inbound 기준이 아니라 outbound 기준으로 확인해야 한다. 확인 순서AWS 콘솔에서 다음 순서로 확인한다.EC2 서비스로 이동한다.운영 서버 인스턴스를 선택한다.하단 N..
리다이렉트 방식으로 운영 중이던 본인인증을 팝업 방식으로 전환하면서 로그인 세션이 끊기는 문제가 발생했고,이를 해결한 과정을 정리했습니다.마이페이지 휴대폰 번호 변경 기능에는 본인인증이 필요했다. 우리 서비스에는 이미 여러 본인인증 흐름이 있다.회원가입 시 본인인증, 비회원 주문 시 본인인증 등이 있고 이 기능들은 모두 리다이렉트 방식으로 동작하고 있었다.즉, 사용자가 우리 서비스 화면에서 본인인증을 시작하면 현재 페이지가 인증 화면으로 이동하고, 인증이 끝나면 다시 우리 서비스로 돌아오는 방식이다. 기존 기능들은 이 방식으로 운영되고 있었지만, 마이페이지 본인인증은 팝업 방식으로 바꾸기로 했다. 왜 마이페이지 본인인증만 팝업으로 바꿨나가장 크 이유는 로그인 세션 문제였다. 마이페이지는 로그인 상태에서 ..
class Solution { public int solution(int a, int b, boolean flag) { return flag ? a + b : a - b; }}
방법 1) switchclass Solution { public int solution(String ineq, String eq, int n, int m) { String operator = ineq + eq; switch (operator) { case ">=" : return n >= m ? 1 : 0; case "!" : return n > m ? 1 : 0; case "
방법 1) 홀짝 모두 구하기class Solution { public int solution(int n) { int answerEven = 0; int answerOdd = 0; for (int i = 0; i for 문 하나에 짝홀을 모두 계산하고 반환값만 분기처리하여 보여주는 방식이다.그러나, n값에 따라 리턴값만 계산해주는 방식이 더 효율적일 것 같다. 방법 2) n값에 따른 리턴값만 계산class Solution { public int solution(int n) { int answer = 0; if (n % 2 == 0) { for (int i = 2; i 방법 3) streamimport java...
class Solution { public int solution(int number, int n, int m) { return (number % n == 0 && number % m == 0) ? 1 : 0; }}
class Solution { public int solution(int num, int n) { return num % n == 0 ? 1 : 0; }}
방법 1) 형변환 및 Math.maxclass Solution { public int solution(int a, int b) { int ab = Integer.parseInt("" + a + b); int twoAb = 2 * a * b; return Math.max(ab, twoAb); }} 만약 합쳐야 할 숫자가 2개가 아니라 100개라면, "" + a + b 보다는 StringBuilder를 사용하는게 메모리 관리면에서 더 최선이 될 수 있다. 방법 2) StringBuilderclass Solution { public int solution(int a, int b) { StringBuilder temp = new S..
방법 1) 형변환 및 조건문class Solution { public int solution(int a, int b) { String aStr = String.valueOf(a); String bStr = String.valueOf(b); String abStr = aStr + bStr; String baStr = bStr + aStr; int abInt = Integer.parseInt(abStr); int baInt = Integer.parseInt(baStr); if (abInt > baInt) return abInt; else if (abInt 가독성 면에서는 나..
방법 1) StringBuilderclass Solution { public String solution(String my_string, int k) { StringBuilder answer = new StringBuilder(); for (int i = 0; i 방법 2) repeatclass Solution { public String solution(String my_string, int k) { return my_string.repeat(k); }} Java 11 이상부터는 repeat 메서드를 사용할 수 있다.엄청 간단하다. 방법 3) streamimport java.util.stream.Collectors;import java.util.s..
방법 1) StringBuilderimport java.util.*;class Solution { public String solution(String str1, String str2) { StringBuilder answer = new StringBuilder(); for (int i = 0; i StringBuilder는 append()를 실행할때마다 내부적으로 담을 수 있는 크기가 찼는지, 넣으려는 값이 null인지 등의 조건검사를 수행한다.또한 처음부터 16칸의 크기를 가지고 시작하는데, 글자를 계속 넣다가 배열의 크기가 다 차면 더 큰 배열로 교체하여 옮기는 작업을 수행한다.해당 과정에서 시간이 char 배열을 직접 이용하는 것보다 조금 더 소요된다..