22년 5월 마지막주 화요일 - os.path.join(), OOP/CBV/FBV, 능동적 주니어

2 분 소요

파이썬 os.path.join() 사용 시 주의할 점

오늘은 퇴사한 분에게 물려받은(?) 코드를 보던 중 버그가 있어 원인을 찾아보니 os.path.join() 함수의 결과가 코드가 의도하는 것과 달라서 문제가 발생하고 있었다. 코드는 대략적으로 아래 형태를 띄고 있었는데,

LOCAL_FOLDER_PATH = "/home/workdirectory/images"
file_path = "/sample/1.jpg"
absolute_file_path = os.path.join(LOCAL_FOLDER_PATH, file_path[:file_path.rindex('/')]) 

원래 absolute_file_path의 값으로 기대했던 건 “/home/workdirectory/images/sample”인데 결과는 “/sample”이 나오고 있었다.

알고보니 os.path.join()을 사용할 때 뒤에 들어오는 인자들의 문자열은 슬래시(/)로 시작하면 안된다고 한다. 경로 문자열이 슬래시로 시작할 경우 join() 과정에서 해당 문자열을 “절대 경로”로 간주하여 이전 인자값들은 모두 버리고 해당 문자열부터 새롭게 결합이 이어진다.

직관적인 예로 os.path.join()의 결과들은 아래와 같다고 한다.

os.path.join('/abc', 'def', 'ghi')
>> '/abc/def/ghi'
os.path.join('/abc', '/def', 'ghi')
>> '/def/ghi'
os.path.join('/abc', '/def', '/ghi')
>> '/ghi'

객체 지향 언어를 진짜로 써야하는 이유는 뭘까?

아침에 출근하며 들은 개발바닥 유튜브 영상에서 리액트가 OOP를 지향하는 언어가 아니라서 어려운 점들이 있다는 얘기를 하는 것을 들었다.

새로운 개념을 배울 때마다 거의 기본적으로 배우는 것이 해당 개념의 장단점이지만 실제 업무에 있어서 그런 장단점들이 어떻게 적용하는 지는 깊이 생각해본 적이 없었던 것 같다.

안그래도 이런 궁금증을 갖고 있던 와중에 오늘 회의에서 현재 장고로 개발 중인 우리 서비스는 클래스 기반(CBV)으로 작성하는 것이 맞는지 함수 기반(FBV)으로 작성하는 것이 맞는지, 논리구조는 view단에 넣는 것이 맞을지 serializer단에 넣는 것이 맞을지에 대한 논의가 나왔다.

아쉽게도 기한 때문에 빨리 개발을 해야하므로 일단은 FBV를 중심으로 작성을 한 뒤 필요에 따라 나중에 리팩토링을 하는 것으로 얘기가 마무리 되었는데 회의를 하고 나니 현재 핫하게 사용되는 언어들의 지향점은 과연 무엇이고 왜 그 언어들이 많이 사용되고 있는지, 그리고 파이썬과 장고는 무엇을 지향하고 있는지 등 의문점들이 많이 생겨났다.

오늘 당장 의문을 해결하지는 못했지만 OOP에 대한 건 시중에 책들도 정말 많고, 두꺼운 책 한권을 전부 할애해가면서 설명할 정도로 깊기도 하고 중요한 내용이다보니 나중에 정말 제대로 각잡고 공부해봐야겠다.

능동적 주니어

오늘은 현재 개발중인 서비스의 작업 방향을 논의하던 중 선임이 장고는 아마 지금쯤 내가 본인보다 더 잘 알고 있을 것이기 때문에 앞으로 코드 리뷰할 때 본인 코드를 꼼꼼히 보고 의견을 달라고 하셨다. 정말로 내가 감히 시니어 프로그래머인 선임보다 장고를 더 잘 알고 있을까? 기술 사용법이야 계속 새로운 것들이 나오고 그것들을 누가 먼저 공부하냐에 따라 이해도가 달라질 수는 있다지만 단기간에 같은 내용을 보고 이해하는 속도와 깊이는 당연히 경험이 많은 프로그래머가 더 좋을 것이다.

하지만 선임이 나한테 저 말을 한 의도는 역시 수동적으로 배우려고만 하지 말고 스스로 고민해보고, 나보다 뛰어나 보이는 사람의 말이나 결과물이라도 비판적으로 사고하면서 배우라는 뜻이 아닐까? 그리고 그렇게 했을 때 내가 성장할 뿐만 아니라 팀원으로서의 시너지를 낼 수 있을 것이다. 아무튼 아직 조금 부담은 되지만 적어도 내가 뭘 알고 있고 뭘 모르는지 정도는 분간하고 말할 수 있도록 빨리 지식을 키워놔야겠다.

댓글남기기