최근에 Python을 본격적으로 공부하기 시작했다. 개발을 한지는 꽤 됐지만, Python은 이상하게도 이제야 제대로 손을 대게 됐다. 다른 언어들을 사용해왔기 때문에 금방 익숙해질 줄 알았는데, 막상 공부를 시작하니 기존에 사용하던 언어와는 확실히 다른 점이 있어 시간이 걸렸다.
1. "가독성"이 핵심
가장 먼저 느낀 건 가독성을 정말 중요하게 여기는 언어라는 점이다.
들여쓰기로 코드 블록을 구분하는 건 처음에는 어색했는데, 쓰다 보니 이게 오히려 구조를 더 명확하게 보이게 해주는 것 같다. 중괄호가 없어서 단순해 보이기도 한다.
예를 들면 조건문도 이렇게 쓴다.
if x > 10:
print("x는 10보다 큽니다")
:와 들여쓰기로 흐름이 깔끔하게 표현된다.
2. 변수 선언이 자유롭다
타입을 명시하지 않아도 되고, 그냥 x = 10처럼 쓰면 된다. 처음엔 이게 좀 불안했다. 동적 타이핑 언어를 쓴 경험도 있었지만, 타입 안정성에 의존하는 스타일에 익숙해져 있어서 그런 것 같다. 하지만 Python은 그 자유로움을 활용하는 방식이 확실히 존재했다.
예를 들어,
name = "Alice"
count = 5
is_valid = True
변수 타입을 신경 쓰지 않아도 일단 코드가 자연스럽게 읽힌다. 물론 큰 프로젝트에서는 타입 힌트를 쓰는 식으로 보완할 수도 있다고 한다.
3. 문법이 깔끔하다
기본 문법 자체가 정말 단순하다. 복잡한 문법 요소가 없고, 오히려 너무 간결해서 약간 허전하게 느껴질 때도 있었다. 대신 읽고 쓰기 쉬운 코드가 된다는 점에선 꽤 강력한 장점이다.
반복문 예시:
for i inrange(5):
print(i)
range() 덕분에 반복 횟수 제어가 편하고, 컬렉션 순회도 깔끔하게 된다.
4. 함수 정의도 간단하다
defgreet(name):
returnf"Hello, {name}!"
위는 f-string 문법을 활용했다. 문자열 포매팅이 간결하면서도 직관적이다.
하지만, f-string은 파이썬 3.6 버전부터 추가된 기능이다.
5. Python은 철학이 있는 언어다
재밌으면서 독특한 점은 import this 명령어를 치면 Python의 철학이 출력된다는 거다.
import this;
출력된 결과물
The Zen of Python, by Tim Peters
Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
그중에서도 마음에 들었던 문장은 "Simple is better than complex." "Readability counts." 이다.
뭔가 Python이라는 언어가 단순한 문법 너머로 지향하는 방향성이 있다는 느낌을 받았다.
6. 활용 분야가 넓다
Python을 배우는 사람마다 진입 계기가 다르다고 들었다. 머신러닝, 데이터 분석, 웹, GUI까지 거의 못 하는 게 없다는 걸 알게 됐다. "범용 언어"라는 말이 진짜 실감났다.
아직 Python의 얕은 물가에서 발 담근 정도지만, 확실히 매력 있는 언어라는 느낌은 받았다. 문법을 익히는 데 큰 어려움은 없었지만, 오히려 Python스럽게 작성하는 방식을 배우는 게 더 중요한 것 같다. 앞으로 프로젝트를 통해 조금씩 스타일을 잡아가면서 익숙해져야 할 것 같다.
Spring Boot에서 트랜잭션을 적절히 관리하면 데이터 무결성을 보장하고 성능을 최적화할 수 있습니다.
✅ @Transactional을 적극 활용하되, 내부 호출(self-invocation) 문제를 주의 ✅ 읽기 전용 트랜잭션(readOnly = true)을 적절히 활용하여 성능을 최적화 ✅ Propagation 옵션을 이해하고, 비즈니스 로직에 맞게 선택 ✅ 체크 예외와 런타임 예외를 rollbackFor, noRollbackFor를 통해 롤백 여부 제어
NativeScript와 구동하는데 필요한 android studio및 xcode와 cocoapods, xcodeproj를 모두 설치한 후 첫 ns 프로젝트에 신나는 마음으로 ns 상태 확인하는 명령어인 ns doctor ~와 nativescript --version 을 터미널에 입력해서 상태를 확인하였다.
그런데 공식문서를 따라서 정상적으로 메뉴얼대로 설치했는데 node module이 호환되지 않는 문제가 발생하였다.
분명..모두 제대로 설치되었는데... xcode 최신 버전 다운로드하면서 MAC 현재 최신 os인 sonoma로 업데이트까지 해놓은 상태였다..
터미널에서 nativescript와 그 외 프로그램들을 여러번 install과 uninstall을 반복했는데 node:process 모듈을 찾지 못한다고 계속 실행을 못하고 있다... node process 모듈은 실행에 반드시 필요한 필수 모듈인데 이것도 여러번 깔았다 지웠다를 반복했다.😭
그래서 유튜브와 ns 공식디코채널 등을 뒤져서 하나의 아이디어를 찾을 수 있었다.
바로 nativescript 최신 버전이 아직 apple silicon arm의 호환이 완벽하진 않을 수 있다는 생각이 들었다. 그래서 nativescript를 지운후 바로 이전 버전으로 설치하였더니 문제가 해결되었다.
npm install -g nativescript@8.5.3
J in ~ λ nativescript --version
8.5.3
ℹ New version of NativeScript CLI is available (8.6.1), run 'npm i -g nativescript' to update.
정확하게 호환이 왜 안되는지 내 컴퓨터에서만 안된 건지는 모르겠지만 ns를 다운그레이드하니까 같은 오류가 뜨지 않았다!
문제는 여기서 끝나지 않았다... android studio 설치하면서 android sdk와 필요한 옵션을 모두 설치하였는데 호환이 안된다고 한다. NativeScript를 다운그레이드하면서 android, ios(cocoapods,xcodeproj) 모두 맞는 버전으로 설치해주어야 호환이 되는 것으로 보인다.
J in ~ λ ns doctor android
✔ Getting environment information
TIP: To avoid setting up the necessary environment variables, you can use the Homebrew package manager to install the Android SDK and its dependencies.
⚠ Update available for component nativescript. Your current version is 8.2.3 and the latest available version is 8.6.1.
✔ Your ANDROID_HOME environment variable is set and points to correct directory.
✔ Your adb from the Android SDK is correctly installed.
✔ The Android SDK is installed.
✔ Javac is installed and is configured properly.
✔ The Java Development Kit (JDK) is installed and is configured properly.
✖ Cannot find a compatible Android SDK for compilation. To be able to build for Android, install Android SDK 28 or later.
Run `$ sdkmanager` to manage your Android SDK versions.
✖ No compatible version of the Android SDK Build-tools are installed on your system. You can install any version in the following range: '>=23 <=32'.
Install the required build-tools through Android Studio. In case you already have them installed, make sure the `ANDROID_HOME` environment variable is set correctly.
Your environment is not configured properly and you will not be able to execute local builds.
그래서 아래와 같이 android sdk 버전을 변경하였다. android studio > More Actions > SDK Manager - Hide Obsolete Packages 체크 해제 - Show Package Details 체크 - SDK Platforms 에서 Android 12L 다운 후 적용 - SDK Tools에서 Android SDK Build-Tools 32.0.0 다운 후 적용
android sdk도 다운그레이드 하고나니 제대로 동작했다.😂
J in ~ λ ns doctor android
✔ Getting environment information
No issues were detected.
✔ Your ANDROID_HOME environment variable is set and points to correct directory.
✔ Your adb from the Android SDK is correctly installed.
✔ The Android SDK is installed.
✔ A compatible Android SDK for compilation is found.
✔ Javac is installed and is configured properly.
✔ The Java Development Kit (JDK) is installed and is configured properly.
⚠ Update available for component nativescript. Your current version is 8.2.3 and the latest available version is 8.6.1.
ios는 xcode 15.0.x 버전에서 ns 8.5.3이랑 호환이 되었다. (다행이다...)
cocoapods와 xcodeproj가 호환이 안되었는데 공식문서에서 ruby gem을 설치할때 2.7버전으로 설치해서 너무 이전버전이라 안 맞는 것 같다. 그래서 최신 ruby로 설치 후(환경변수도 ruby@2.7이라고 하면 안된다!!) 다시 cocoapods와 xcodeproj를 설치하니까 잘 돌아갔다. 😅 개발환경 셋팅부터가 만만치 않은 ns였다..
결론
Device : Mac M1 OS : sonoma 14.1.1 NativeScript : 8.5.3 android sdk : android 12L xcode : 15.0.x
워낙 유명해서 알고는 있었지만 한번도 관심이 안갔었는데 서점에서 조금 읽어보니까 흥미로워서 바로 충동적으로 사버렸다.
이 책은 사람들이 본능적으로 하게되는 오해에 대해서 직관적이면서 이해가 쉽도록 잘 풀어서 쓴 책이다.
저자는 이 책을 아들 며느리와 함께 집필하였는데 이 책을 출간하기 전에 세상을 떠났다.
저자는 다양한 단체와 기업, 유명인사들을 만나면서 사람들이 세계에 대해 오해하고 있는 부분을 강연하고 다닌 사람이었다.
나도 마찬가지로 세계에 대해서 오해하고 있는 사람중 한명이었고 이 책 덕분에 내가 본능적으로 오해를 하고 얼마나 왜곡된 시각을 갖고 있는지 알게 되었다.
현대시대에서 많은 정보와 통계가 오픈되어 있고 인터넷으로 전세계가 연결되어 있지만 사람들은 세계를 보는 시각이 왜곡되었다고 소개해준다.
사람들은 '개발도상국'과 '선진국' 이란 단어로 서로 큰 차이가 있다 생각하고 그 사이엔 국가가 없거나 적다고 생각한다. (간극 본능)
하지만 사실 개발도상국과 선진국으로 나눌수 있을 정도로 세계는 나뉘어 있지 않고 세계적으로 기술의 발전과 노력으로 이미 대부분 많은 개발도상국이었던 나라들은 커다란 발전을 이루어서 개발도상국이라 부르는 것은 실례이다.
대신 저자는 소득에 따른 4개의 단계로 나누어서 1단계부터 4단계로 나누어서 표현하라고 추천해준다.
내가 보기에도 두개로 나누는 것보다 4단계로 나누는게 더 올바르다고 생각한다. 하지만 나도 이 책을 읽기 전까지는 오해를 하고 있었고 아직도 아프리카와 동아시아를 제외한 다른 아시아 국가들은 개발도상국이라고 생각하고 있었다.
이런 오해는 사람들이 일부러 하거나 누군가 세뇌를 한 결과물이 아니라 저자는 인간의 본능에서 나오는 오해라고 얘기한다.
집 밖에 야생동물들이 다니는 시대에는 위험으로부터 몸을 보호하기 위해 이러한 본능들이 반드시 필요했지만 이제는 그런 시대는 지나갔고 그런 위험은 밖에 없다. 그래서 그런 위험에서 지키던 본능으로 사람들이 세계를 이상하게 왜곡해서 보고있다고 해석한다.
앞서 소개한 간극본능 처럼 다른 본능들이 사람들이 세계를 오해하게 한다.
저자가 소개한 본능은 간극본능, 부정본능, 직선본능, 공포본능, 크기본능, 일반화본능, 운명본능, 단일관점본능, 비난본능, 다급함본능 총 10가지 이다. 각 장에서 하나씩 소개하면서 적절한 일화와 어떻게 이 본능이 잘못되었고 도표와 자료들을 통해 왜 틀렸는지 설명해주었다.
이 책 덕분에 올바르게 세계를 볼 수 있는 시각이 생겼고 전체를 보는 올바른 틀을 갖게 되었다. 또한 전세계가 얼마나 발전했으며 그만큼 기아와 아동사망률이 줄어서 희망이 있고 절망적이지만은 않다는 것을 알게 되었다. 그리고 전세계에 대한 시각 뿐 아니라 어떠한 현상을 볼 때 전체적인 것을 냉정하고 올바르게 분석하는 사고방식을 알게 되어 고마운 책이다.
이 책은 전체를 보는 통찰력이 필요한 사람에게 적극 추천한다. 조직에서 의사 결정권을 갖고있는 사람이거나 전체적인 시장을 분석해야하는 사람에게는 필수적이다.
이런 사람의 본능을 이해하지 못한 채로 전체를 해석하려고 하거나 무언가를 결정하려고 한다면 잘못된 결과가 나올 수도 있을 것이다.
요즘 사람들은 너무 자극적인 자료로 편파적이게 세상을 보고 점점 시스템이 복잡해지다보니 전체를 보는 능력이 떨어진다. 그래서 자기가 하는 역할에만 집중해서 그런지 전체적인 시각은 많이 부족하다고 느낀다.