전체 글

컴퓨터 공학

당신의 Go 코드의 nil 체크가 실패하는 이유(feat. interface)

* 몇 개월 전, 회사에서 문제 해결을 위해서 리팩터링이 있었고, 그 과정에서 에러가 발생했었는데, 그 경험을 공유하고자 이 글을 작성합니다.  저에게 하루 약 120만 건 이상의 요청이 들어오는 서버에 관한 태스크가 주어졌습니다. 서버에 새로운 파이프라인을 추가했고, 이에 대해서 개발환경에서 모든 테스트를 마치고, 실제 운영환경에 배포했습니다.  무사 배포를 기원했지만, 배포하자마자 서버는 죽었다 살아나기를 반복했고, 이 때문에 바로 서버를 롤백했습니다.  저는 매우 의아했습니다. 에러가 발생한 지점의 코드를 저는 고친 것이 없었고, 해당 지점에서 원래 에러가 발생하고 있지 않았기 때문이죠. 그렇게 한 시간 동안 원인을 찾기 위해 로그를 열심히 찾았고, 결국 문제의 원인을 찾아냅니다.    문제 발생의..

주간회고

(회고)2023년 회고

올해는 무엇을 했고, 어떤 것을 얻었는지 나열함으로써 한 해를 돌아보려 합니다. 23년 역시 많은 일들이 있었고, 많이 성장했으며, 많은 어려움이 있었던 시간이었습니다. 2월, 길벗 출판사 멘토링 시작 우연히 예전에 활동했던 개발 동아리를 통해서 멘토링을 지원했고, 코딩 자율학습 멘토링을 하게 되었습니다. 게시판에 올라온 질문에 대해서 답변을 하고, 학습 가이드를 만들었어요. 많은 분들이 예전에 제가 똑같이 겪었던 시행착오를 겪고 있더라고요. 과거의 저를 도와주는 마음으로 열심히 답변을 달았습니다. 이때의 인연으로 지금까지 파이썬뿐만 아니라, C, HTML+JS, 스프링 부트까지 모두 멘토 및 튜터로 활동하고 있어요. 3월, 채널톡 입사 호감이 있었던 회사였는데, 우연히 채용공고를 보게 되었고 1월 말 ..

Spring

(Spring) JpaRepository는 인터페이스인데 어떻게 동작할까?

Java의 인터페이스 Java의 인터페이스는 추상 메서드를 정의할 수 있습니다. public interface Person { void walk(); void run(); } 이제는 너무나 잘 아시겠지만, Java 8버전 이후로는 기본 메서드를 작성할 수 있습니다. public interface Person { void walk(); void run(); default void sayHello() { System.out.println("Hello"); } } 또한 인터페이스의 추상메서드를 사용하기 위해서는 반드시 구현이 필요합니다. 왜냐하면 껍데기만 제공해주는 '인터페이스'이기 때문이죠. public class User implements Person { void walk() { System.out.pr..

독서

(나도코딩의 파이썬 입문) 11장. 모듈과 패키지(p.382~395)

안녕하세요! 멘토를 담당하게 된 이안입니다. 오늘은 11장 '모듈과 패키지'에 대해 이어서 학습할게요. 이번이 마지막 시간이네요 오늘 공부할 내용은 다음과 같습니다. 🧐 공부할 내용(p.382~395) * 내장 함수 사용하기 * 외장 함수 사용하기 1. 내장 함수 사용하기 책에서는 내장 함수를 어떻게 하면 사용할 수 있는지에 대해 설명해 줍니다. 우리는 이미 많은 내장 함수를 써왔어요. len(), input(), int(), str() 등등 다양한 내장 함수를 사용했죠. 우리는 모든 내장 함수를 기억하지 못합니다. 하지만 우리는 dir()이라는 함수를 사용해서 해당 객체가 어떤 내장 함수를 사용할 수 있는지 확인할 수 있습니다. 책에서는 dir함수를 이용해서 random 모듈, pickle 모듈, st..

독서

(나도코딩의 파이썬 입문) 11장. 모듈과 패키지(p.369~381)

안녕하세요! 멘토를 담당하게 된 이안입니다. 오늘은 11장 '모듈과 패키지'에 대해 이어서 학습할게요. 오늘 공부할 내용은 다음과 같습니다. 🧐 공부할 내용(p.369~381) * 패키지와 모듈 위치 확인하기 * 패키지 설치하기 1. 패키지와 모듈 위치 확인하기 파이썬에서는 inspect 모듈을 활용하면 현재 사용하고 있는 모듈의 위치를 확인할 수 있습니다. import inspect from travel import * import math print(inspect.getmodule(thailand)) print(inspect.getmodule(math)) 책에서 확인하는 방법과 파일 위치가 바뀌었을 때도 잘 확인이 된다는 것을 상세히 설명해 줬습니다. 그래서 저는 inpsect 모듈에 대해서 좀 더 ..

독서

(나도코딩의 파이썬 입문) 11장. 모듈과 패키지(p.363~368)

안녕하세요! 멘토를 담당하게 된 이안입니다. 오늘은 11장 '모듈과 패키지'에 대해 이어서 학습할게요. 오늘 공부할 내용은 다음과 같습니다. 🧐 공부할 내용(p.363~368) 모듈 공개 설정하기: __all__ 모듈 직접 실행하기 1. 모듈 공개 설정하기: __all__ 제가 포스팅한 이전 글을 보시면 __init__.py 파일을 활용해서 객체를 미리 생성한 뒤 다른 파일에서 가져다 쓰는 방법을 소개해드렸어요. p.363에 소개하는 것 역시 비슷한 맥락입니다. vietnam이라는 모듈을 변수로 사용하는 것이죠. from travel import * trip_to = vietnam.VietnamPackage() trip_to.detail() 이 코드가 에러가 나는 이유는 vietnam이 정의되지 않아서 ..

독서

(나도코딩의 파이썬 입문) 11장. 모듈과 패키지(p.353~362)

안녕하세요! 멘토를 담당하게 된 이안입니다. 오늘은 11장 '모듈과 패키지'에 대해 학습할게요. 오늘 공부할 내용은 다음과 같습니다. 🧐 공부할 내용(p.353~362) * 모듈 다루기 * 패키지 다루기 1. 모듈 다루기 파이썬에서는 서로 관련이 있거나 비슷한 기능을 하는 함수, 클래스 등을 담고 있는 파일을 제공하는데 이를 모듈이라고 합니다. 그리고 프로그램의 기능을 독립적인 작은 단위로 나누는 작업을 모듈화라고 합니다. 모듈화가 왜 필요할까요? 좋은 프로그램을 작성하는 조건 중 하나는 '재사용성'을 높이는 것입니다. 모듈화가 되어 있지 않고 같은 코드가 여러 파이썬 파일에 산재되어 있다며 어떨까요? 코드가 전혀 재사용되지 않기 때문에 파일의 용량이 늘어나고, 변경 사항이 생길 때마다 모든 부분에 대해..

독서

(나도코딩의 파이썬 입문) 10장. 예외 처리(p.338~345)

안녕하세요! 멘토를 담당하게 된 이안입니다. 오늘은 10장 '예외 처리'를 이어서 학습할게요! 오늘 공부할 내용은 다음과 같습니다. 🧐 공부할 내용(p.338~345) * 사용자 정의 예외 처리하기 * 오류와 상관없이 무조건 실행하기: finally 1. 사용자 정의 예외 처리하기 우리는 앞서서 ValueError, ZeroDivisionError같은 몇가지 에러를 봤습니다. 파이썬에는 기본으로 정의된 여러가지 에러들이 존재합니다. Built-in Exceptions In Python, all exceptions must be instances of a class that derives from BaseException. In a try statement with an except clause that ..

후;
성장하는 개발 블로그