[python] open ai certificate verify failed Error
·
Server/Error
에러 개발을 하다 보면 다양한 에러들을 마주하게 되는데, 이번에는 배포된 서버에서 이상 없이 작동하고 있던 로직이 로컬에서 SSL 인증서 관련 문제를 발생시키고 있었다. 접근 방법 구글링을 통해 두가지 해결 방안을 찾아낼 수 있었다. 첫 번째는 certifi 의존성을 설치한 후, 이를 import 하여 인증하는 방법이었다. 내 로컬 환경에는 이미 certifi가 설치되어 있었고, 배포된 환경에서 이미 잘 구동하고 있으므로 굳이 멀쩡한 코드에 import 하는 명령어를 추가로 작성할 필요는 없어 보였다. 두 번째 방법은 python 버전을 업그레이드하는 방법이었다. 하지만 현재 개발 환경에서 사용하고 있는 파이썬 버전은 이미 최신 버전이었으므로, 해당 방법 또한 적합하지 않았다. 배포된 서버에서는 잘 작동..
[Github] Code Review
·
Server/ETC.
Code Review PR(Pull Request)를 날렸다면, 이제 다른 사람들의 PR에 리뷰도 남길 줄 알아야 한다. Github를 이용해서, Reviewers를 설정할 수 있지만 현재 해당 기능은 유로화 되어 있다. 인원당 4$를 지불해야 리뷰어 지정이 가능하기 때문에, 해당 기능은 제외하고 리뷰 남기는 방법만 남겨본다. 리뷰를 남기자 리뷰를 남길 PR에 들어가서 File changed 탭을 선택한다. PR작성자가 리뷰를 모두 반영하여 수정하였거나, 해당 PR에 딱히 수정사항이 없다면 Approve를 선택한 후, Submit review를 진행하면 된다. Comment의 경우에는 딱히 수정할 필요는 없지만, 상대방에게 남기고 싶은 의견(의도를 묻는다던지 확인을 요한다던지 등등)이 있을 때 사용하고,..
[Github] Pull Request
·
Server/ETC.
Pull Request 협업을 진행하다 보면 Pull Request, PR을 많이 이용하게 된다. 바로 Main에 Merge를 때리는 것이 아닌, 해당 브랜치를 Main에 합쳐도 되겠습니까?라고 함께 작업하는 사람들에게 동의 요청하는 것이다. 이 과정에서 리뷰를 나누고, 수정한 다음 모두의 승인(Approve)이 떨어지게 되면 우리는 Main에 Merge를 진행하게 되는 것이다. (Main에서 해당 Branch를 Pull 하는 것이다.) PR 진행 일단, 브랜치를 만들어서 작업을 진행해야한다. 모든 작업을 마쳤으면 커밋과 push를 진행한다. 다음과 같이 feature/sign -> origin: feature/sign이라는 브랜치로 push를 진행하게 된다. main에 push 하는 것이 아닌, 작업 ..
[Github] Issue 생성
·
Server/ETC.
Github Issues Github를 통해서도 이슈관리를 진행할 수 있다. 물론 Jira 등의 이슈 관리 툴에 비하면 부족한 것은 사실이나, 브랜치 생성 등을 바로 진행할 수 있다는 장점도 존재한다. 실제로 이슈를 위해 사용하기도 하나, 이미지 업로드 등을 위한 목적으로 사용하기도 한다. Issue 등록 Repository의 Issue탭에 들어가서 New issue 버튼을 클릭한다. 제목과 내용을 입력하고, Assignees에서 해당 이슈를 처리할 사람, Labels를 통해 어떤 종류의 이슈인지 등록한다. 우측의 Development 칸의 Create a branch를 만들게 되면 해당 이슈의 브랜치를 생성할 수 있다. 어느 레파지토리에, 어떤 소스를 선택하여 새로운 브랜치를 만들지 메뉴를 확인할 수 ..
[Python] Function Parameter Tip
·
Server/Python
Keyword Argument def add_resume_info(name: str, age: int, city: str): print(f"안녕하세요. {name}입니다.") print(f"{age}살이며, 현재 {city} 거주중입니다.") add_resume_info("코드플리", 23, "서울") 파이썬에서 함수를 정의하면 다음과 같이 파라미터를 입력하여 함수를 진행할 수 있다. 위의 방법도 좋지만, 작업을 하면서 파라미터가 계속 바뀌기 때문에 keyword argument를 사용하여 함수를 불러오는 것이 더 용이하다. def add_resume_info(name: str, age: int, city: str): print(f"안녕하세요. {name}입니다.") print(f"{age}살이며, 현재..
[Python] black, pyright, isort, refurb, flake8 설치 및 적용
·
Server/Python
HomeBrew 기반 설치 black 설치 brew install black pyright 설치 brew install pyright isort 설치 brew install isort flake8 설치 brew install flake8 Python Settings(Preference)
동시성을 해결하기 위한 방법
·
Server/Java
온보딩 과제를 진행하던 도중, 동시성에 관한 문제를 직면하고 싶었다. auto increase를 사용하여 추가하는 no와 달리, 마지막 순서를 찾아 해당 순서에서 +1을 진행하는 로직에서는 동시성 문제가 발생하지 않을까?라는 생각에 도달했고, 스레드를 만들어 테스트를 한 결과. Pk였던 no는 1, 2, 3, ... 순서에 맞춰 생성되고 있었지만, orderId는 1, 1, 1, 2, 2, 2, 2, 2,... 순서가 겹쳐지기 시작했다. 접근 목록 트랜잭션 격리 수준 격상 MySQL 락 사용 Synchronized 사용 Redis Lettuce Lock 사용 Redis Redisson Lock 사용 트랜잭션 격리 수준 격상 트랜잭션의 격리 수준을 최상으로 올렸다. SERIALIZABLE을 사용하여 테스트..
[Java] Javadoc Export 명령어
·
Server/Java
아무 설정을 하지 않고 export 명령어를 사용하게 되면 인코딩 오류가 발생할 수 있으므로 먼저 build.gradle(java)에 javadoc 인코딩과 관련된 옵션들을 작성하자. javadoc { options.addStringOption("locale","ko_KR"); options.addStringOption("encoding","UTF-8"); options.addStringOption("charset","UTF-8"); options.addStringOption("docencoding","UTF-8"); } 그 후, IntelliJ Terminal에 아래와 같은 명령어를 입력한다. ./gradlew javadoc 그 후 build 폴더를 들어가게 되면 javadoc들이 생겨난 것을 확인할 ..
코드플리
코드 플레이 리스트