├── 00. 개요.md ├── 01. 당신이 당신의 문제를 스스로 만든다.md ├── 02. 번역기의 배신.md ├── 03. 영어가 아니라 기술 영어다.md ├── 04. 단어장이 아니라 문장이다.md ├── 05. 마스터플랜 - 바로 실전으로.md ├── 06. 녹슬지 않는 기술 영어 만들기.md ├── CONTRIBUTING.md ├── Gemfile ├── LICENSE ├── README.md ├── _config.yml ├── _includes └── nav.html ├── _layouts └── default.html ├── assets └── css │ └── style.css ├── index.md └── netlify.toml /00. 개요.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "00. 개요" 3 | layout: default 4 | nav_order: 0 5 | permalink: "/00-intro/" 6 | --- 7 | 8 | # 시작하며: 당신이 이 글을 읽어야 하는 이유 9 | 10 | ## 목차 11 | 12 | 1. [1편: 당신이 당신의 문제를 스스로 만든다](/01-problem/) 13 | 2. [2편: 번역기의 배신](/02-translation/) 14 | 3. [3편: 영어가 아니라 기술 영어다](/03-tech-english/) 15 | 4. [4편: 단어장이 아니라 문장이다](/04-sentences/) 16 | 5. [5편: 마스터플랜 - 실전에서 살아남기](/05-masterplan/) 17 | 6. [6편: 녹슬지 않는 기술 영어 만들기](/06-keep-fresh/) 18 | --- 19 | 20 | ## 시나리오: 나는 영어가 무서워 21 | 22 | Spring Security 설정하다가 막혀서 구글링 시작. "Spring Security JWT 설정" 검색하니 한국어 블로그 10개가 나왔습니다. 첫 번째 블로그 따라했더니 에러. 두 번째도 에러. 세 번째는 deprecated 경고... 23 | 24 | 3시간 삽질 끝에 Spring 공식문서 열었더니 3분만에 해결됐습니다. 25 | 26 | **"아... 진작 공식문서 볼걸."** 27 | 28 | 이 후회, 익숙하신가요? 29 | 30 | ## 우리가 반복하는 실수들 31 | 32 | ``` 33 | 월요일: "이 에러 뭔지 모르겠네" → 한국어 블로그 검색 → 2시간 삽질 34 | 화요일: "새 버전 뭐가 바뀌었지?" → 번역기 돌리기 → 오역으로 혼란 35 | 수요일: "이 기술 어떻게 쓰지?" → ChatGPT에 물어보기 → 구식 답변 36 | 목요일: "버그 리포트 해야하는데" → 영어 무서워서 포기 37 | 금요일: "공식문서 봐야하는데..." → 번역된 블로그 찾기 → 또 삽질 38 | ``` 39 | 40 | 매주 이런 패턴을 반복하면서도 우리는 변하지 않습니다. 왜일까요? 41 | 42 | ## 영어가 무서워서? 아니다. 43 | 44 | 진짜 문제는 영어가 아닙니다. **잘못된 믿음**이 문제입니다: 45 | 46 | ### 착각 1: "영어 잘해야 개발 잘한다" 47 | 아닙니다. 기술 문서는 중학교 영어 수준입니다. `if`, `return`, `throw` 같은 단어만 알면 됩니다. 48 | 49 | ### 착각 2: "번역기가 다 해결해준다" 50 | 번역기는 `Semaphore`를 `신호기`로 번역합니다. `Promise`를 `약속`으로 번역합니다. 이게 도움이 되나요? 51 | 52 | ### 착각 3: "한국어 자료로 충분하다" 53 | GitHub 스타 10k+ 프로젝트와 최신 기술, 논문, 공식문서는 영어로 공유되는것이 대부분입니다. 이 기술들을 전부 놓치고 한국어 자료만 볼 순 없잖아요! 54 | 55 | ## 이 시리즈를 쓰게 된 이유 56 | 57 | 개발을 공부하거나, 심지어 현업에 계신 분들마저도 이런 말들을 정말 많이 합니다. 58 | 59 | `영어 그거 몰라도 개발 잘만 하던데요? 영어공부 정말 죽어도 하기 싫고 필요도 못 느껴요.` 60 | 61 | 글쎄요, 저는 생각이 조금 다릅니다. 영어를 배우지 않고 IT를 공부하는것은 접근 가능한 정보를 스스로 제한하며 공부하는것과 다름이 없거든요. 62 | 63 | 기술 문서는 문학이 아닙니다. 시를 읽는 게 아니에요. 그냥 설명서입니다. 패턴이 있고, 반복되는 구조가 있습니다. 64 | 65 | 66 | 67 | ## 이 시리즈의 목표 68 | 69 | **거창한 목표 없습니다.** 70 | 71 | - 원어민처럼 영어 잘하기? ❌ 72 | - TOEIC 900점 만들기? ❌ 73 | - 영어 회화 마스터? ❌ 74 | 75 | **딱 하나만 목표입니다.** 76 | 77 | - 기술 문서 번역기 없이 읽기 ✅ 78 | 79 | 이 문서는 영어 이론이 아닌 영어 학습법에 대해 다루겠습니다. 대부분의 경우 학습법만 알려주면 알아서 잘 하거든요. 80 | 81 | ## 누구를 위한 글인가 82 | 83 | 이런 분들을 위해 씁니다: 84 | 85 | - 매번 한국어 블로그 찾다가 삽질하는 개발자 86 | - 공식문서 보면 머리 아픈 개발자 87 | - 영어 때문에 오픈소스 기여 못하는 개발자 88 | - "영어 공부해야지" 3년째 말만 하는 개발자 89 | - 번역기 없으면 불안한 개발자 90 | 91 | ## 이 시리즈의 구성 92 | 93 | **1편: 당신이 당신의 문제를 스스로 만든다** 94 | 왜 한국어 블로그와 ChatGPT가 당신을 삽질하게 만드는지 95 | 96 | **2편: 번역기의 배신** 97 | Semaphore가 신호기가 되는 순간, 모든 게 망한다 98 | 99 | **3편: 영어가 아니라 기술 영어다** 100 | 문법책 버리고 패턴만 익혀라 101 | 102 | **4편: 단어장이 아니라 문장이다** 103 | Etymology와 문장 구조로 배우는 실전 영어 104 | 105 | **5편: 마스터플랜 - 실전에서 살아남기** 106 | 매일 15분, 3개월 로드맵 107 | 108 | **6편: 녹슬지 않는 기술 영어 만들기** 109 | 실력과 흥미를 동시에 유지하는 법 110 | 111 | ## 약속 112 | 113 | 이 시리즈를 다 읽고 나면: 114 | 115 | 1. 왜 공식문서를 봐야 하는지 납득하게 됩니다 116 | 2. 번역기를 끄고 싶어집니다 117 | 3. 영어가 그렇게 어렵지 않다는 걸 알게 됩니다 118 | 4. 오늘 당장 시작할 수 있는 구체적인 방법을 얻습니다 119 | 5. 최종 마스터플랜을 제시합니다 120 | 6. 영어를 일상으로 끌어들일수 있게 됩니다 121 | 122 | [다음: 1편 당신이 당신의 문제를 스스로 만든다 ➡](/01-problem/) -------------------------------------------------------------------------------- /01. 당신이 당신의 문제를 스스로 만든다.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "01. 당신이 당신의 문제를 스스로 만든다" 3 | layout: default 4 | nav_order: 1 5 | permalink: "/01-problem/" 6 | --- 7 | 8 | # 1편: 당신이 당신의 문제를 스스로 만든다 9 | 10 | ## 왜 이 글을 쓰게 되었나 11 | 12 | 3년차, 5년차가 되어도 영어 문서 앞에서 주눅드는 개발자들을 많이 봤습니다. 보통 "영어 잘하는 사람들이나 보는 거 아니야?"라고 생각하며 블로그와 유튜브를 뒤적거리다가, 결국 더 큰 문제를 만들어내는 악순환을 반복하죠. 이 시리즈는 그런 분들을 위한 글입니다. 13 | 14 | ## 블로그 주도 개발: 지옥의 나날들 15 | 16 | 처음 웹 개발을 배울때, Spring Boot 구버전에서 Spring Security를 설정하고 있었습니다. JWT 인증을 구현해야 했는데, 한국어 블로그들을 참고해서 이렇게 짰습니다. 자세히는 기억 안 났지만 아마 Tistory 블로그를 참조했던 기억이 납니다. 17 | 18 | ```java 19 | @Configuration 20 | @EnableWebSecurity 21 | public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 22 | 23 | @Override 24 | protected void configure(HttpSecurity http) throws Exception { 25 | http.authorizeRequests() 26 | .antMatchers("/api/auth/**").permitAll() 27 | .anyRequest().authenticated(); 28 | } 29 | } 30 | ``` 31 | 32 | 그러고 나서 컴파일을 하고 서버를 돌리려는데 이런 메시지를 보게 됩니다. deprecated? 이게 다 뭐지. 33 | 34 | ``` 35 | 'WebSecurityConfigurerAdapter' is deprecated 36 | 'configure(HttpSecurity)' is deprecated 37 | 'authorizeRequests()' is deprecated 38 | 'antMatchers(String...)' is deprecated 39 | ``` 40 | 41 | 검색해보니 더 이상 지원하지 않는 기술이라 안전하지 않은 기술이라 Bean 기반으로 고쳐야 한다는데... 하 모르겠습니다. 블로그나 검색해보기로 했습니다. 42 | 43 | ## 삽질의 연속 44 | 45 | **첫 시도**: "Spring Security JWT 인증 구현" 구글링 46 | - 상위 10개 블로그 다 읽음 47 | - 전부 구식 방법 (WebSecurityConfigurerAdapter 상속) 48 | - Stack Overflow도 2019년 답변들만... 49 | 50 | **두번째 시도**: "Spring Boot 2.7 Spring Security 설정" 재검색 51 | - 또 구식 방법들 52 | - YouTube 영상도 전부 옛날 방식 53 | - ChatGPT도 구식 코드 제공 54 | 55 | 여기서 ChatGPT 얘기를 좀 더 해보자면, ChatGPT나 다른 AI 모델들은 학습 데이터의 시점이 정해져 있습니다. 예를 들어 2023년까지의 데이터로 학습했다면, 2024년에 deprecated된 메서드는 모릅니다. 게다가 학습 데이터의 대부분이 이미 구식이 된 블로그 글들이라면? AI도 구식 코드를 "정답"이라고 알려주게 됩니다. 결국 AI에게 물어봐도 블로그 검색과 똑같은 문제에 빠지는 거죠. 56 | 57 | ## 3분만에 끝난 해결책 58 | 59 | 포기하고 Spring Security 공식문서를 열었습니다: 60 | https://spring.io/guides/gs/securing-web/ 61 | 62 | ```java 63 | @Configuration 64 | @EnableWebSecurity 65 | public class WebSecurityConfig { 66 | 67 | @Bean 68 | public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { 69 | http 70 | .authorizeHttpRequests((authz) -> authz 71 | .requestMatchers("/api/auth/**").permitAll() 72 | .anyRequest().authenticated() 73 | ); 74 | return http.build(); 75 | } 76 | } 77 | ``` 78 | 79 | 별 문제 없이 한번에 해결되는걸 확인할 수 있었습니다. 와. 제가 제 문제를 스스로 만들고 있었군요. 80 | 81 | ## 왜 이런 일이 반복되나? 82 | 83 | ### IT 분야는 오늘 배운게 내일 쓰레기가 됨 84 | 85 | 웹 개발이나 AI 개발 같은 분야는 변화가 정말 빠릅니다. 물론 안정적이고 검증된 기술을 사용하는 대규모 사업체나 레가시 기술이 중요한 분야는 다르겠지만... 아무튼 실시간으로 업데이트가 가능한 분야 특성상 당장 어제까지 멀쩡하게 쓰던 메서드를 사용하면 경고가 뜨거나, 좀 엄격한 라이브러리의 경우 아예 컴파일 자체를 거부해버리기도 합니다. 86 | 87 | 많은 개발자들이 개발을 할때 문제가 생기면 ChatGPT에게 묻거나 블로그 글을 검색하곤 합니다. 한국어로 적혀있으니까! 근데 거기 적혀있는거 많은 경우에는, **현재 시점에서는 쓸모가 없는 내용입니다.** 현재 시점에서는 업데이트가 되었을 확률이 높기 때문에. **구식 코드를 그대로 사용하면 나중에 문제가 될 수 있습니다.** 당장은 작동해도 나중에 큰 문제를 일으킬 수 있어요. 마치 자전거 바퀴에 막대기를 끼우고 넘어지는 것처럼, 의도치 않게 스스로 문제를 만드는 셈입니다. 88 | 89 | ### 개발자들의 패턴 90 | 1. 문제 발생 91 | 2. "한국어로 된 게 없나?" 검색 92 | 3. 구식/잘못된 정보로 삽질 93 | 4. 결국 공식문서 참조 94 | 5. "아, 진작 이거 볼걸..." 95 | 96 | ## 나만의 경험이 아니다 97 | 98 | **팀장**: "React 18 Suspense 어떻게 쓰지?" 99 | - 한국어 블로그: React 16 방식 안내 100 | - 2시간 삽질 후 React 공식문서 확인 101 | - 5분만에 해결 102 | 103 | **후배**: "Docker multi-stage build 에러" 104 | - Stack Overflow 2020년 답변으로 1일 삽질 105 | - Docker 공식문서 Dockerfile best practices 106 | - 10분만에 해결 107 | 108 | **동료**: "AWS Lambda 콜드 스타트 최적화" 109 | - 개인 블로그 3시간 읽기 110 | - AWS 공식문서 Performance tuning 111 | - 15분만에 핵심 파악 112 | 113 | ## 최신 정보는 모두 영어로 적혀있음 114 | 115 | ### IT 생태계의 진실 116 | - **GitHub 스타 10k+ 프로젝트**: 많은 경우에 영어로 작성되어있음 117 | - **최신 기술 정보, 논문**: 주로 영어로 먼저 공개 118 | - **기술 정보 follow-up을 위한 최대 커뮤니티인 Hacker News**: 모두 영어! 119 | - **개인 해커로 활동하며 버그 바운티 활동**: 정책이 영어로 적혀있고, PoC도 영어로 작성해야 함 120 | - **공식 문서**: 100% 영어 (한국어 번역 있어도 구버전) 121 | 122 | ## 영어를 공부하는 것이 아닌 기술 영어를 공부하세요 123 | 124 | 아무리 생각해도 영어를 공부하기 너무 싫을 수 있습니다. 학교에서 영어공부를 했던 경험이 부정적일 수 있고, 언어를 새로 배운다는 것 자체가 방대한 작업으로 느껴질 수 있기 때문입니다. 125 | 126 | 하지만 생각해보세요. 예를 들면 일본 애니메이션을 본 경험이 있다면, 일본어를 모르기 때문에 일본 애니메이션을 보는 것이 두려웠나요? 그냥 보는것이 재밌으니까 보죠. 그러면서 단어 하나씩 귀에 들리는겁니다. 마나부(배우다), 쿠우(먹다), 아소부(놀다)... 언어를 배우는 작업 자체가 처음부터 완벽하게 하는 것이 아닌 점진적으로 진행되는 일입니다. 127 | 128 | 우리가 어학시험 만점을 받으려는 것도 아니고 외국인과 자유자재로 대화하려는 것도 아닙니다. 그냥 기술 문서를 읽고 싶은 것뿐입니다. 129 | 130 | 기술 문서는 일반 영어와 다릅니다. 사용하는 단어도 제한적이고(대략 8천 개 정도 어쩌면 그보다 작음), 문장 구조도 비교적 단순하고 항상 보는 단어만 봅니다. 생각보다 달성 가능한 목표일 수 있습니다. 131 | 132 | 다른 사람들이 공식 문서 보고 한번에 문제 해결할 때, 우리도 블로그 뒤적거려가며 고생하지 않고 그렇게 할 수 있다면 좋지 않을까요? 133 | 134 | ## 다음 편 예고 135 | 136 | 그렇다면 어떻게 기술 영어를 효율적으로 배울 수 있을까요? 일반적인 영어 학습법과는 다른, 개발자를 위한 특별한 방법이 있습니다. 다음 편에서는 왜 IT 학습을 위해 영어가 필수인지, 그리고 기술 영어를 배우는 것이 생각보다 어렵지 않다는 것을 더 자세히 다뤄보겠습니다. 137 | 138 | 여러분도 공식 문서를 두려워하지 않고 바로 읽을 수 있게 되는 그날까지, 이 시리즈가 작은 도움이 되었으면 좋겠습니다. 139 | 140 | --- 141 | 142 | [⬅ 이전: 개요](/00-intro/) | [다음: 2편 번역기의 배신 ➡](/02-translation/) -------------------------------------------------------------------------------- /02. 번역기의 배신.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "02. 번역기의 배신" 3 | layout: default 4 | nav_order: 2 5 | permalink: "/02-translation/" 6 | --- 7 | 8 | # 2편: 번역기의 배신 9 | 10 | ## 공식문서를 번역기로 읽으면 되지 않나? 11 | 12 | 1편에서 공식문서의 중요성을 강조했더니 이런 질문이 들어올 수 있습니다. 13 | 14 | "요즘 번역기 좋아졌는데? ChatGPT도 있고, DeepL도 있고, 구글 번역도 있고... 굳이 영어 공부할 필요 있나? 공식문서도 번역기로 읽으면 되잖아?" 15 | 16 | 저도 그렇게 생각했습니다. 2025년이면 AI가 완벽하게 번역해줄 줄 알았죠. GPT-5도 있고, Claude도 있고, 번역 특화 AI들도 많은데 뭐가 문제겠어요? 하지만 이런 시나리오를 생각해봅시다. 생각이 좀 달라지실거에요. 17 | 18 | ## 시나리오 1: 프로덕션 배포 직전의 대참사 19 | 20 | 한 개발자가 Redis 문서를 번역기로 읽고 있었는데, 이런 문장이 있었습니다(EXPIRE 명령어 설명): 21 | 22 | ``` 23 | "Set a timeout on key. After the timeout has expired, the key will automatically be deleted." 24 | ``` 25 | 26 | 번역기 결과: 27 | ``` 28 | "키에 시간 초과를 설정합니다. 시간 초과가 만료된 후, 키는 자동으로 삭제됩니다." 29 | ``` 30 | 31 | 별 문제 없어 보이죠? 저도 그렇게 생각했습니다. 그런데 동료가 제 코드를 리뷰하다가 물어봅니다. 32 | 33 | "왜 expire를 1로 설정했어요?" 34 | 35 | "문서에 시간 초과를 설정하라고 해서... 1초면 충분할 것 같아서요." 36 | 37 | "...이거 TTL(Time To Live)이에요. 1초 후에 데이터 사라져요." 38 | 39 | "네? 아 그게... 시간 초과가..." 40 | 41 | 말문이 막혔습니다. "timeout"을 "시간 초과"로 번역하니까 "연결이 끊기는 시간"으로 오해했던 겁니다. 실제로는 "유효 기간"이었는데. 만약 이대로 배포했다면 모든 캐시 데이터가 1초마다 사라지는 대참사가 일어날 뻔했습니다. 42 | 43 | ## 시나리오 2: 문맥을 정확하게 파악하지 못하는 기계번역 44 | 45 | Semaphore는 운영체제/동시성 프로그래밍에서 공유 자원에 동시에 접근할 수 있는 작업(스레드/프로세스)의 ‘허용 가능한 개수’를 제어하는 동기화 기법입니다. 그냥 음차해서 "세마포어"라고 쓰는 것이 표준적이며, 직역해서 `신호기`라고 하면 의미가 흐려집니다. 특히 GitHub README 같은 곳을 기계번역한 초벌본에서 자주 보이는 실수입니다. 46 | 47 | 공식 문서(일반적인 정의)에서 흔히 나오는 문장 예: 48 | ``` 49 | A counting semaphore is a type of lock that allows you to limit the number of processes 50 | that can concurrently access a resource to some fixed number. 51 | ``` 52 | 이걸 제대로 해석하면: *“카운팅 세마포어는 어떤 자원에 동시에 접근할 수 있는 프로세스(혹은 스레드)의 수를 고정된 상한으로 제한하는 락(동기화 수단)의 한 종류다.”* 53 | 54 | 번역기를 그대로 쓰면 종종 `신호기 기반 잠금` 같이 어색한 표현이 나오고, **개념을 처음 접하는 사람은 ‘신호를 주고받나?’ 같은 잘못된 심상을 가지기 쉽습니다.** 55 | 56 | 예시 - 어떤 오픈소스 프로젝트의 README: 57 | ``` 58 | 원문: 59 | "This library uses semaphores to handle concurrent requests. 60 | The semaphore limits the number of parallel operations to prevent resource exhaustion." 61 | 62 | 번역기 결과: 63 | "이 라이브러리는 동시 요청을 처리하기 위해 신호기를 사용합니다. 64 | 신호기는 자원 고갈을 방지하기 위해 병렬 작업 수를 제한합니다." 65 | ``` 66 | 67 | 이걸 읽고 이해할 수 있나요? 신호기가 대체 뭘 하는 건지... 68 | 69 | 실제로 일어난 대화: 70 | ``` 71 | 나: "이 부분 신호기로 처리하면 될 것 같은데요" 72 | 팀장: "신호기요? 무슨 신호?" 73 | 나: "아... README에서 본 건데... semaphore..." 74 | 팀장: "아 세마포어. 번역기로 문서 읽으셨군요." 75 | ``` 76 | 77 | 순간 공기가 얼어붙었습니다. 78 | 79 | ## 기술 용어 번역의 근본적 한계 80 | 81 | ### 1. 도메인 특화 용어 82 | 개발에서 쓰는 단어들은 일반적인 뜻과 완전히 다른 경우가 많습니다: 83 | 84 | | 영어 | 일반 번역 | 개발에서 의미 | 문제점 | 85 | |------|----------|---------------|--------| 86 | | `thread` | 실 | 스레드 (실행 단위) | "실을 생성한다"? | 87 | | `memory leak` | 기억 누출 | 메모리 누수 | "기억이 샌다"? | 88 | | `cache` | 은닉처 | 캐시 (임시 저장소) | "은닉처를 비운다"? | 89 | | `cookie` | 쿠키(과자) | 쿠키 (웹 데이터) | "과자를 저장한다"? | 90 | | `daemon` | 악마 | 데몬 (백그라운드 프로세스) | "악마를 실행한다"? | 91 | 92 | ### 2. 새로운 용어들 93 | 기술이 발전하면서 새로 생긴 용어들은 번역 데이터베이스에 없습니다: 94 | 95 | - `containerization` → 번역기: "용기화" / 실제: "컨테이너화" 96 | - `orchestration` → 번역기: "오케스트라 연주" / 실제: "오케스트레이션" 97 | - `serverless` → 번역기: "서버 없는" / 실제: "서버리스" 98 | - `edge computing` → 번역기: "가장자리 컴퓨팅" / 실제: "엣지 컴퓨팅" 99 | 100 | ### 3. 문맥 의존적 번역 101 | 같은 단어여도 상황에 따라 완전히 다릅니다: 102 | 103 | ```javascript 104 | // 'build'의 경우 105 | "build a Docker image" → 도커 이미지를 빌드한다 (O) / 건설한다 (X) 106 | "build a house" → 집을 짓는다 (O) / 빌드한다 (X) 107 | 108 | // 'run'의 경우 109 | "run the application" → 애플리케이션을 실행한다 (O) / 달린다 (X) 110 | "run a marathon" → 마라톤을 뛴다 (O) / 실행한다 (X) 111 | ``` 112 | 113 | 2025년 현재 GPT-5, Claude 4, DeepL 같은 최신 AI 번역기도 이런 미묘한 맥락 차이를 완벽하게 구별하지 못합니다. 114 | 115 | ## 실제 개발할 때 겪는 문제들 116 | 117 | ### 검색 결과가 엉망 118 | 번역된 용어로 검색하면: 119 | - "신호기 프로그래밍" 검색 → 교통 신호등 제어 시스템 나옴 120 | - "약속 체이닝" 검색 → 결혼 상담소 광고 나옴 121 | - "semaphore programming" 검색 → 제대로 된 자료 나옴 122 | - "promise chaining" 검색 → JavaScript 튜토리얼 나옴 123 | 124 | ### Stack Overflow 검색 지옥 125 | 실제 경험: 126 | - 한국어로 번역해서 검색: 결과 0개 127 | - 영어로 검색: 정확히 같은 문제 해결한 답변 5개 128 | 129 | 130 | ## Promise가 "약속"이 되면서 생기는 문제 131 | 132 | JavaScript 문서에서 메서드 설명이 이렇게 되어 있다면 어떨까요?: 133 | ```javascript 134 | // 원문 135 | "This method returns a Promise that resolves when the operation completes" 136 | 137 | // 번역 138 | "이 메서드는 작업이 완료될 때 해결되는 약속을 반환합니다" 139 | ``` 140 | 141 | 이걸 읽고 이해할 수 있나요? 실제 코드와 비교해보면: 142 | 143 | ```javascript 144 | // "약속이 해결되면 then을 실행한다"고 이해하면? 145 | fetch('/api/data') 146 | .then(response => response.json()) // 약속이... 뭐? 147 | .then(data => console.log(data)) // 그 다음 약속이...? 148 | .catch(error => console.error(error)); // 약속을 잡는다? 149 | 150 | // "Promise가 resolve되면 then을 실행한다"고 이해하면? 151 | fetch('/api/data') 152 | .then(response => response.json()) // Promise가 성공하면 실행 153 | .then(data => console.log(data)) // 체이닝된 Promise 처리 154 | .catch(error => console.error(error)); // Promise rejection 처리 155 | ``` 156 | 157 | 어떤 게 더 이해하기 쉬운가요? 158 | 159 | ## 번역기의 또 다른 함정들 160 | 161 | ### 1. 뉘앙스 완전 손실 162 | ``` 163 | 원문: "This feature is experimental. Use with caution." 164 | 번역: "이 기능은 실험적입니다. 주의해서 사용하세요." 165 | ``` 166 | 167 | 실험적이라는 말은 실제로는 서비스 제공자(Provider)가 동작 오류에 대해 책임을 지지 않는다는 의미로 사용하는 경우가 많기 때문에, 직역하면 이상한 의미가 됩니다. 168 | 169 | ### 2. 경고 메시지 오독 170 | ``` 171 | 원문: "DEPRECATED: This will be removed in v3.0" 172 | 번역: "사용되지 않음: 이것은 v3.0에서 제거될 것입니다" 173 | ``` 174 | 175 | Deprecation은 단순히 사용하지 않음을 의미하는 것이 아닌 업데이트 지원 중단으로 권장되지 않는 메서드를 의미합니다. 176 | 177 | ### 3. 코드 주석까지 번역되는 재앙 178 | ```python 179 | # 원본 코드 180 | # Initialize the connection pool 181 | pool = ConnectionPool() 182 | 183 | # 번역기 거친 후 184 | # 연결 수영장을 초기화합니다 185 | pool = ConnectionPool() # pool이 수영장...? 186 | ``` 187 | 188 | ## 결론: 번역기는 보조 도구일 뿐 189 | 190 | 번역기는 **100% 이해했을 때** 검증 용도로만 써야 합니다. 191 | 192 | **잘못된 사용법**: 193 | ``` 194 | 1. 영어 문서 열기 195 | 2. 전체 선택 → 번역기 돌리기 196 | 3. 번역 결과 맹신하기 197 | 4. 이상한 코드 작성 198 | 5. 프로덕션 터뜨리기 직전 199 | 6. 동료가 구해줌 200 | ``` 201 | 202 | **올바른 사용법**: 203 | ``` 204 | 1. 영어 문서 직접 읽기 205 | 2. 모르는 단어만 사전 찾기 206 | 3. 이해 안 되는 문장만 번역기 참고 207 | 4. 여러 번역 결과 비교 208 | 5. 원문과 대조하여 검증 209 | 6. 확실히 이해한 후 코드 작성 210 | ``` 211 | 212 | ## 그럼 어떻게 해야 하나? 213 | 214 | **답**: 영어 배우기를 피하지 말자 215 | 216 | "번역기 있는데 왜 배워?"가 아니라 217 | "번역기 때문에 더 배워야 한다" 218 | 219 | **왜냐하면**: 220 | - 번역이 맞는지 틀린지 판단하려면 영어를 알아야 함 221 | - 검색할 때 영어 키워드를 써야 제대로 된 자료 나옴 222 | - 동료들과 소통할 때 원래 용어를 알아야 함 223 | - GitHub, Stack Overflow에서 활동하려면 영어 필수 224 | - 새로운 기술 정보는 100% 영어로 먼저 나옴 225 | 226 | 번역기가 발전해도 개발자가 영어를 배워야 하는 이유는 변하지 않습니다. 오히려 AI 시대가 되면서 더 많은 영어 자료를 더 빠르게 소화해야 하는 상황이 되었죠. 227 | 228 | ## 다음 편 예고 229 | 230 | "그래, 영어 배워야 하는 건 알겠는데... 어떻게?" 231 | 232 | 영어를 어떻게 배워야 하는지에 대한 구체적인 방법을 모르는 경우가 많습니다. 학원? 인강? 문법책? 다 해봤는데 안 되던데? 233 | 234 | "기술 영어"라는 특별한 영역을 정복하는 법, 곧 공개합니다. 235 | 236 | --- 237 | 238 | [⬅ 이전: 1편 당신이 당신의 문제를 스스로 만든다](/01-problem/) | [다음: 3편 영어가 아니라 기술 영어다 ➡](/03-tech-english/) -------------------------------------------------------------------------------- /03. 영어가 아니라 기술 영어다.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "03. 영어가 아니라 기술 영어다" 3 | layout: default 4 | nav_order: 3 5 | permalink: "/03-tech-english/" 6 | --- 7 | 8 | # 3편: 영어가 아니라 기술 영어다 9 | 10 | ## 왜 영어 공부가 실패하는가 11 | 12 | 1편과 2편을 읽고 "그래, 영어 배워야지!"라고 결심했다가도 막상 시작하려니 막막하실 겁니다. 13 | 14 | "토익 책 다시 꺼내야 하나?" 15 | "문법책부터 봐야 하나?" 16 | "CNN 뉴스 들어야 하나?" 17 | "영어 회화 학원 등록해야 하나?" 18 | 19 | **다 필요 없습니다.** 20 | 21 | 왜냐하면 우리가 배워야 하는 건 '영어'가 아니라 '기술 영어'니까요. 22 | 23 | ## 일반 영어 vs 기술 영어: 완전히 다른 세계 24 | 25 | ### 일반 영어의 세계 26 | - 필요 어휘: 일상적, 문학적, 학술적 언어 수만 개... 27 | - 문장 구조: 복잡하고 다양함 28 | - 관용구, 속어, 은유 표현 많음 29 | - 문화적 맥락 이해 필요 30 | - 듣기, 말하기, 읽기, 쓰기 모두 필요 31 | 32 | ### 기술 영어의 세계 33 | - 필요 어휘: 핵심 단어는 몇천 개 수준 34 | - 문장 구조: 단순하고 반복적 35 | - 관용구 거의 없음, 직설적 표현 36 | - 문화적 맥락 불필요 37 | - 읽기만 하면 됨 (가끔 쓰기) 38 | 39 | ## 기술 문서에서 실제로 자주 보는 단어들 40 | 41 | 기술 문서를 읽다 보면 항상 같은 단어들이 반복됩니다: 42 | 43 | **동작 관련**: 44 | - return, call, execute, run, create, initialize, handle, throw, catch 45 | 46 | **구조 관련**: 47 | - function, method, object, array, class, property, value, element 48 | 49 | **상태 관련**: 50 | - true, false, null, undefined, empty, valid, invalid 51 | 52 | **흐름 관련**: 53 | - if, when, then, else, while, for, before, after 54 | 55 | 이런 단어들만 알아도 문서 읽기가 훨씬 수월해집니다. 일반 영어에서 필요한 2만 개 이상의 어휘와 달리, 기술 문서는 정말 제한적인 어휘를 반복 사용합니다. 56 | 57 | ## 기술 문서의 문장 패턴 58 | 59 | 기술 문서는 정말 단순한 패턴을 반복합니다: 60 | 61 | ### 패턴 1: X returns Y 62 | ``` 63 | - This method returns a Promise 64 | - The function returns an array 65 | - fetch() returns a Response object 66 | ``` 67 | 68 | ### 패턴 2: X is used to Y 69 | ``` 70 | - useState is used to manage state 71 | - This hook is used to fetch data 72 | - The flag is used to enable debugging 73 | ``` 74 | 75 | ### 패턴 3: If X, then Y 76 | ``` 77 | - If the condition is true, the block executes 78 | - If an error occurs, the function throws 79 | - If no match is found, it returns null 80 | ``` 81 | 82 | 이런 패턴들이 계속 반복되는 걸 볼 수 있습니다. 패턴 몇십 개만 익히면 대부분의 문서를 이해할 수 있게 됩니다. 83 | 84 | ## 마인드셋 전환: 프로그래밍 언어 배우듯이 85 | 86 | ### 잘못된 접근 87 | ```python 88 | # 영어를 "언어"로 접근 89 | 1. 문법 공부 6개월 90 | 2. 단어장 외우기 6개월 91 | 3. 리스닝 연습 6개월 92 | 4. 회화 연습 6개월 93 | 5. 그래도 문서 못 읽음 94 | ``` 95 | 96 | ### 올바른 접근 97 | ```python 98 | # 영어를 "도구"로 접근 99 | 1. 자주 쓰는 패턴 20개 익히기 (1주) 100 | 2. 핵심 단어 500개 익히기 (2주) 101 | 3. 실제 문서 읽으며 확장 (계속) 102 | ``` 103 | 104 | 프로그래밍 언어 배울 때를 생각해보세요: 105 | - C++ 배울 때 모든 STL을 외우고 시작했나요? 106 | - Python 배울 때 모든 내장 함수를 암기했나요? 107 | - JavaScript 배울 때 ECMAScript 명세서부터 읽었나요? 108 | 109 | 아니죠. 그냥 `if`, `for`, `function` 같은 기본만 배우고 바로 코딩 시작했잖아요. 110 | 111 | ## 시작하는 구체적인 방법 112 | 113 | ### Step 1: 패턴 인식 훈련 (1주차) 114 | 매일 공식 문서 1페이지씩 읽으면서 반복되는 패턴 찾기: 115 | ``` 116 | 월: React 공식문서 - Hooks 페이지 117 | 화: Node.js 공식문서 - fs module 118 | 수: MDN - Array methods 119 | 목: Python 공식문서 - Built-in Functions 120 | 금: Docker 공식문서 - Getting Started 121 | ``` 122 | 123 | 읽으면서 모르는 단어는 무시하고 **구조만** 파악합니다. 124 | 잘 모르겠으면 ChatGPT한테라도 부탁해보세요. 이 문서에서 자주 사용되는 패턴은 무엇일까? 라고. 125 | 126 | ### Step 2: 핵심 단어만 정복 (2-3주차) 127 | 모든 단어를 알 필요 없습니다. 자주 나오는 단어들부터 익히세요: 128 | 129 | **동사 위주로**: 130 | - return, call, execute, run, throw, catch, handle... 131 | 132 | **명사 위주로**: 133 | - function, method, object, array, string, error... 134 | 135 | **형용사 위주로**: 136 | - synchronous, asynchronous, deprecated, optional... 137 | 138 | **접속사/전치사**: 139 | - if, when, while, after, before, with, without... 140 | 141 | ### Step 3: 실전 투입 (4주차부터) 142 | 이제 번역기 끄고 직접 읽습니다: 143 | 1. 모르는 단어 나와도 일단 넘어가기 144 | 2. 문맥으로 의미 추측하기 145 | 3. 정 모르겠으면 그 단어만 검색 146 | 4. 절대 전체 문장 번역하지 않기 147 | 148 | ## 학습 가속화 꿀팁 149 | 150 | ### 1. 에러 메시지로 시작하기 151 | 에러 메시지는 가장 단순한 영어입니다: 152 | ``` 153 | Cannot read property 'x' of undefined 154 | Expected string but received number 155 | Missing required parameter 'id' 156 | ``` 157 | 158 | 이런 문장부터 읽기 시작하세요. 159 | 160 | ### 2. 코드 주석 읽기 161 | ```javascript 162 | // Initialize the counter 163 | let counter = 0; 164 | 165 | // Check if user is authenticated 166 | if (user.isAuthenticated) { 167 | // Grant access to protected route 168 | next(); 169 | } 170 | ``` 171 | 172 | 주석은 핵심만 간단히 적혀있어서 읽기 쉽습니다. 173 | 174 | ### 3. Commit 메시지 읽기 175 | ``` 176 | fix: resolve memory leak in connection pool 177 | feat: add retry logic for failed requests 178 | docs: update README with installation steps 179 | ``` 180 | 181 | 짧고 명확한 문장들이라 부담이 없습니다. 182 | 183 | ## 실패하지 않는 비법: 작게 시작하기 184 | 185 | **첫 주 목표**: 186 | - 하루에 에러 메시지 5개 읽기 187 | - 시간: 5분 188 | 189 | **둘째 주 목표**: 190 | - 하루에 공식 문서 1단락 읽기 191 | - 시간: 10분 192 | 193 | **셋째 주 목표**: 194 | - 하루에 공식 문서 1페이지 읽기 195 | - 시간: 15분 196 | 197 | 이렇게 하면 3개월 후: 198 | - 기술 문서 술술 읽음 199 | - Stack Overflow 답변 이해함 200 | - GitHub Issues 작성 가능 201 | 202 | ## 마인드셋 정리 203 | 204 | ❌ "영어 잘해야 개발 잘한다" 205 | ✅ "기술 용어만 알면 문서 읽는다" 206 | 207 | ❌ "문법부터 완벽하게" 208 | ✅ "패턴 파악하고 바로 실전" 209 | 210 | ❌ "모든 단어 암기" 211 | ✅ "핵심 단어 500개만" 212 | 213 | ❌ "영어 못하면 창피해" 214 | ✅ "틀려도 되니까 일단 읽자" 215 | 216 | ## 다음 편 예고 217 | 218 | 이제 마인드셋은 잡았습니다. 그런데 구체적으로 어떻게 학습해야 할까요? 219 | 220 | 다음 편에서는: 221 | - 기술 문서의 핵심 문장 구조 20가지 222 | - Etymology(어원)로 단어 쉽게 외우는 법 (예: syn-chron-ous = 함께-시간-의) 223 | - 2025년 기준 추천 학습 자료 224 | - 실전 예문으로 패턴 체득하기 225 | 226 | --- 227 | 228 | [⬅ 이전: 2편 번역기의 배신](/02-translation/) | [다음: 4편 단어장이 아니라 문장이다 ➡](/04-sentences/) -------------------------------------------------------------------------------- /04. 단어장이 아니라 문장이다.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "04. 단어장이 아니라 문장이다" 3 | layout: default 4 | nav_order: 4 5 | permalink: "/04-sentences/" 6 | --- 7 | 8 | # 4편: 단어장이 아니라 문장이다 9 | 10 | ## 내가 단어장을 한 번도 안 쓴 이유 11 | 12 | 저는 태어나서 단 한 번도 영어 단어장으로 공부한 적이 없습니다. 대신 롱맨(Longman) 영영사전과 실제 텍스트(논문, 블로그, 시험 문제)로만 공부했습니다. 단어장을 사 본 적은 있는데 하루 이상 쳐다보지 않았습니다. 지루하니까요. 여러분도 단어장 쳐다보고 있기 싫잖아요? 13 | 14 | ## Play의 비극: 단어장이 만드는 재앙 15 | 16 | 이를테면 play를 "놀다"로 해석한 ESL(제 2외국어로서의 영어) 학습자가 다음과 같은 문장을 영작한다고 해봅시다. 17 | 18 | `음, 나 혼자 노는거 좋아해!` 19 | 20 | 그래서 영작을 할때 이렇게 생각합니다. 논다는 단어는 뭐가 좋을까. play? 그럼 이렇게 쓰면 되겠다. 21 | 22 | ``` 23 | "Um, I want to play with myself!" 24 | ``` 25 | 26 | 하지만 이렇게 쓰면... 변태로 몰릴 수 있습니다. 영어에서 'play with'는 성적인 뉘앙스를 담을 수 있기 때문입니다. 27 | 28 | 단어장에는 이렇게 써있었을 겁니다: 29 | ``` 30 | play: 놀다, 연주하다, 경기하다 31 | ``` 32 | 33 | 기술 문서에서는: 34 | ``` 35 | "play a role" - 역할을 하다 36 | "play nice with" - 호환되다 37 | "play around" - 실험해보다 (informal) 38 | "play it safe" - 안전하게 하다 39 | ``` 40 | 41 | 단어장에 적힌 단어는 죽은 단어입니다. 문맥이 없이 단어만 있으면 무슨 소용일까요? 특히 우리는 기술 분야에서만 영어를 볼 것이라고 생각하면 더더욱 그렇습니다. 42 | 43 | ## 문장으로 배워야 하는 진짜 이유 44 | 45 | ### 1. 컨텍스트가 의미를 결정한다 46 | ```javascript 47 | // "return"의 다양한 의미 48 | return value; // 값을 반환하다 49 | return early; // 일찍 종료하다 50 | return to sender; // 발신자에게 되돌리다 (이건 프로그래밍 아님) 51 | ``` 52 | 53 | ### 2. 콜로케이션(연어)를 자연스럽게 익힌다 54 | 단어장으로는 절대 못 배우는 것들: 55 | ``` 56 | - throw an exception (예외를 던지다) ✅ 57 | - throw an error (에러를 던지다) ✅ 58 | - throw a mistake ❌ (이런 표현 없음) 59 | 60 | - make a request (요청을 만들다) ✅ 61 | - do a request ❌ (이런 표현 없음) 62 | - perform a request (요청을 수행하다) ✅ 63 | ``` 64 | 65 | ### 3. 문법이 저절로 체득된다 66 | 67 | 문장을 통째로 읽으면: 68 | ``` 69 | "This function returns a promise that resolves when..." 70 | ``` 71 | - function은 단수니까 returns 72 | - that 이하는 promise를 설명 73 | - when은 시간 조건 74 | 75 | 이걸 문법책으로 배우면 3개월, 문장으로 읽으면 3초. 76 | 77 | ## Etymology(어원)로 단어 뜻 유추하기 78 | 79 | 어원이 뭘까요? 한국어로 치면 우리는 나 어제 밥 먹었어. 라는 문장을 구사한다면 '먹었어'는 '먹다'의 변형이 됩니다. 이때 이 원형이 되는 '먹다'라는 단어가 어근이 됩니다. 80 | 81 | 영어도 마찬가지로 이런 어근이 있습니다. `shocking(충격적인)`이라는 단어는 `shock(충격)` + `-ing(형용사형 분사화 접사)`로 구성이 되죠. 영어단어는 이런 어근의 결합으로 많이 구성이 되기 때문에 자주 사용되는 몇몇 어근을 암기해두면 외워야 할 단어수가 많이 줄어듭니다. 82 | 83 | `co-work`, `co-efficient`, `co-porate` 등 아하, `co-`라는 어근은 함께한다는 뜻이니까 뭔가 함께하거나 상호작용이 있는거겠구나. 라고 의미를 부분적으로라도 생각해보고, 문맥 속에서 무슨 뜻인지 짐작이라도 해볼수 있으니, 실제로 당장 암기하지 않은 단어라도 깨우칠 가능성이 있는거죠. 84 | 85 | 예를 들어 다음과 같은 단어들을 생각해봅시다: 86 | 87 | ### Synchronous = syn + chron + ous 88 | - syn: 함께 (synthesis, syndrome) 89 | - chron: 시간 (chronology, chronic) 90 | - ous: ~한 성질의 91 | → "함께 시간을 맞춘" = 동기적 92 | 93 | ### Asynchronous = a + syn + chron + ous 94 | - a: 부정 (없음) 95 | → "시간을 맞추지 않은" = 비동기적 96 | 97 | ### Initialize = init + ial + ize 98 | - init: 시작 (initiate) 99 | - ial: ~의 100 | - ize: ~하게 만들다 101 | → "시작 상태로 만들다" = 초기화하다 102 | 103 | ### Deprecated = de + prec + ated 104 | - de: 아래로, 반대로 105 | - prec: 가치 (precious, price) 106 | - ated: ~된 107 | → "가치가 떨어진" = 더 이상 권장하지 않는 108 | 109 | 그럼 이런 어근 학습을 어떻게 하냐고요? 우선은 요즘은 구글도 단어 검색을 하면 etymology 분석을 기본적으로 해주니 단어마다 etymology 분석을 해봐도 좋고... 자주 사용하는 etymology 자체는 외우면 좋은건 사실입니다. 110 | 111 | 제가 단어장은 사지 마라고 했지만 어근, 어원 단어장에 대해서는 좀 예외를 두고 싶습니다. 수능용 어근/어원 단어장은 많으니 직접 추천하긴 어렵지만 검색해보면 많이 나올거에요. 112 | 113 | ## 실전 학습법: 모르는 단어 관리 114 | 115 | - 단어장 구매 ❌ 116 | - 실제 문장에서 발견한 단어만 ✅ 117 | 118 | **나만의 플래시카드 만들기**: 119 | 120 | 앞면: 121 | ``` 122 | "The function throws an exception when the input is invalid" 123 | ``` 124 | 125 | 뒷면: 126 | ``` 127 | throws: (예외를) 발생시키다 128 | exception: 예외 (정상적이지 않은 상황) 129 | invalid: 유효하지 않은 130 | ``` 131 | 132 | **왜 문장째로 저장하나?** 133 | - 단어가 쓰이는 맥락을 기억 134 | - 문법 구조도 함께 익힘 135 | - 실제 사용 예시를 체득 136 | 137 | ## 추천 학습 자료 (2025년 기준) 138 | 139 | ### 사전 140 | - **Longman Dictionary of Contemporary English**: 간단한 영어로 설명 141 | - **Cambridge Dictionary**: 프로그래밍 용어 설명 good 142 | - **MDN Glossary**: 웹 개발 용어 전문 143 | 144 | ### 읽을거리 (난이도 순) 145 | 1. **GitHub README 파일들**: 짧고 명확 146 | 2. **공식 문서의 Getting Started**: 초보자 대상이라 쉬움 147 | 3. **Stack Overflow accepted answers**: 실용적인 영어 148 | 4. **Tech 블로그 (Medium, Dev.to)**: 구어체 섞인 기술 영어 149 | 5. **RFC 문서**: 고급자용, 정확한 기술 영어 150 | 151 | ### 피해야 할 자료 152 | - TOEIC/TOEFL 단어장 153 | - 일반 영어 회화책 154 | - 비즈니스 영어 교재 155 | - 옛날 프로그래밍 책의 번역서 156 | 157 | ## 문장 패턴 20선 (외우지 말고 익숙해지기) 158 | 159 | ``` 160 | 1. X is used to Y 161 | 2. X is designed for Y 162 | 3. X returns Y 163 | 4. X throws Y when Z 164 | 5. If X, then Y 165 | 6. X must be Y before Z 166 | 7. X can be Y or Z 167 | 8. X should not be null 168 | 9. This allows X to Y 169 | 10. X is responsible for Y 170 | 11. X depends on Y 171 | 12. X is required for Y 172 | 13. Make sure X before Y 173 | 14. X happens when Y 174 | 15. X prevents Y from Z 175 | 16. Either X or Y 176 | 17. X is called when Y 177 | 18. X is triggered by Y 178 | 19. By default, X 179 | 20. X is expected to Y 180 | ``` 181 | 182 | 이 패턴들을 단어장처럼 외우는 게 아니라, 문서 읽으면서 "아 또 이 패턴이네" 하고 인식하는 겁니다. 183 | 184 | ## 실제 적용 예시 185 | 186 | React 문서의 한 문장: 187 | ``` 188 | "This Hook returns a stateful value and a function to update it." 189 | ``` 190 | 191 | **단어장식 해석**: 192 | "이 갈고리는 상태가 있는 값과 그것을 업데이트하는 함수를 반환한다" 193 | → 갈고리? 상태가 있는 값? 194 | 195 | **문장 학습식 이해**: 196 | "이 Hook은 상태값과 그것을 업데이트하는 함수를 반환한다" 197 | → Hook은 그냥 Hook, stateful은 상태를 가진 198 | 199 | 차이가 느껴지시나요? 200 | 201 | ## 마무리: 영어는 도구다 202 | 203 | 개발할 때 변수명 지을 때도 우리는 이미 영어를 씁니다: 204 | ```javascript 205 | getUserById() 206 | handleClickEvent() 207 | isValidEmail() 208 | ``` 209 | 210 | 이것도 문장입니다. 우리는 이미 영어 문장을 만들고 있어요. 211 | 212 | **기술 영어도 똑같습니다. 문장을 읽으세요. 패턴을 익히세요. 단어장은 버리세요.** 213 | 214 | ## 다음 편 예고 215 | 216 | 이제 이론은 충분합니다. 5편에서는 실전 연습법을 다룹니다: 217 | 218 | - 매일 15분 투자로 3개월 안에 문서 읽기 219 | - PR 리뷰 코멘트 쓰는 법 220 | - 기술 블로그 포스트 읽는 순서 221 | - ChatGPT/Claude를 영어 학습 도구로 활용하기 222 | 223 | "아는 것"과 "할 수 있는 것"의 간극을 메우는 마스터플랜, 곧 공개합니다. 224 | 225 | --- 226 | 227 | [⬅ 이전: 3편 영어가 아니라 기술 영어다](/03-tech-english/) | [다음: 5편 마스터플랜 - 실전에서 살아남기 ➡](/05-masterplan/) -------------------------------------------------------------------------------- /05. 마스터플랜 - 바로 실전으로.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "05. 마스터플랜 - 실전에서 살아남기" 3 | layout: default 4 | nav_order: 5 5 | permalink: "/05-masterplan/" 6 | --- 7 | 8 | # 5편: 마스터플랜 - 실전에서 살아남기 9 | 10 | ## 이제 진짜 시작이다 11 | 12 | 1편부터 4편까지 읽으셨다면 이미 마음가짐은 준비되셨을 겁니다. 공식문서의 중요성도 알고, 번역기의 함정도 알고, 기술 영어가 뭔지도 알고, 문장으로 배워야 한다는 것도 알죠. 13 | 14 | 그런데 막상 시작하려니 막막하실 겁니다. 15 | 16 | "그래서... 오늘 뭐부터 하지?" 17 | 18 | 이제 구체적인 액션 플랜을 제시합니다. 3개월 안에 기술 문서를 번역기 없이 읽을 수 있는 마스터플랜입니다. 19 | 20 | ## Phase 1: 워밍업 (1-2주) 21 | 22 | ### Day 1-3: 현재 레벨 체크 23 | ``` 24 | 월: React 공식문서 Introduction 읽기 25 | - 몇 %나 이해했는지 스스로 평가 26 | - 모르는 단어 10개만 메모 27 | 28 | 화: 같은 문서 다시 읽기 29 | - 어제보다 더 이해되는지 확인 30 | - 반복되는 패턴 찾기 31 | 32 | 수: 다른 프레임워크 문서 Introduction 읽기 33 | - Vue, Angular, Svelte 중 택 1 34 | - 비슷한 패턴이 보이는지 확인 35 | ``` 36 | 37 | ### Day 4-7: 기본 패턴 체득 38 | 매일 15분씩 투자: 39 | ```javascript 40 | // 이런 주석들을 영어로 바꿔보기 41 | // 사용자 정보를 가져온다 42 | // fetchUserInfo() 43 | 44 | // 에러가 발생하면 null을 반환한다 45 | // if (error) return null; 46 | 47 | // 비동기로 데이터를 처리한다 48 | // await processDataAsync(); 49 | ``` 50 | 51 | 답: 52 | ```javascript 53 | // Fetch user information 54 | // Return null if error occurs 55 | // Process data asynchronously 56 | ``` 57 | 58 | 이거 하면서 느낄 겁니다. "어? 생각보다 단순한데?" 59 | 60 | ## Phase 2: 실전 투입 (3-6주) 61 | 62 | ### 매일 루틴 (15분) 63 | ``` 64 | 아침 5분: GitHub Trending 프로젝트 README 1개 읽기 65 | 점심 5분: Stack Overflow 질문 1개 + 답변 1개 읽기 66 | 저녁 5분: 관심 라이브러리 changelog 읽기 67 | ``` 68 | 69 | ### 주간 미션 70 | **월요일**: Error 메시지 수집 71 | ``` 72 | 실제 개발하다 만난 에러 메시지 5개를 영어로 정리 73 | "Cannot read property 'x' of undefined" 74 | → undefined의 x 속성을 읽을 수 없다 75 | → 왜 이런 에러가 나는지 영어로 설명해보기 76 | ``` 77 | 78 | **수요일**: PR 코멘트 연습 79 | ``` 80 | 오픈소스 프로젝트에서 PR 하나 골라서 코멘트 읽기 81 | "This looks good to me" 82 | "Could you add some tests?" 83 | "Please rebase with main branch" 84 | → 이런 표현들 노트에 정리 85 | ``` 86 | 87 | **금요일**: 나만의 README 작성 88 | ```markdown 89 | # My Project 90 | 91 | ## Description 92 | This project helps developers to... 93 | 94 | ## Installation 95 | 96 | **npm install my-project** 97 | 98 | ## Usage 99 | 100 | **run docker...** 101 | ``` 102 | 103 | 처음엔 3줄도 힘들 겁니다. 괜찮아요. 3개월 후엔 30줄도 쓸 수 있을 거예요. 104 | 105 | ## Phase 3: 레벨업 (7-12주) 106 | 107 | ### 실전 미션 리스트 108 | 109 | #### Level 1: 읽기만 110 | - [ ] React 새 기능 문서 읽고 요약하기 111 | - [ ] Node.js 보안 업데이트 읽고 이해하기 112 | - [ ] Docker 베스트 프랙티스 문서 완독 113 | 114 | #### Level 2: 상호작용 115 | - [ ] GitHub Issue에 버그 리포트 작성 (영어로) 116 | - [ ] Stack Overflow에 질문 올리기 117 | - [ ] 오픈소스 프로젝트에 오타 수정 PR 118 | 119 | #### Level 3: 창작 120 | - [ ] 기술 블로그 포스트 1개 영어로 작성 121 | - [ ] 내 프로젝트 영문 문서 작성 122 | - [ ] Dev.to나 Medium에 글 투고 123 | 124 | ### ChatGPT/Claude 활용법 (보조 도구로만!) 125 | 126 | **좋은 활용**: 127 | ``` 128 | "이 문장 구조를 분석해줘: 129 | 'This method returns a promise that resolves when...'" 130 | 131 | "이 두 표현의 뉘앙스 차이가 뭐야? 132 | 'should be' vs 'must be'" 133 | 134 | "내가 쓴 이 문장이 자연스러운지 확인해줘: 135 | 'This function is making the array to be sorted'" 136 | ``` 137 | 138 | **나쁜 활용**: 139 | ``` 140 | "이 문서 전체 번역해줘" 141 | "이거 요약해줘" 142 | "이해 안 되니까 쉽게 설명해줘" 143 | ``` 144 | 145 | 그리고 LLM의 문맥 파악 능력은 제한적이기 때문에, 꼭 답변을 실제로 검색해서 맞는 이야기인지 검증해주세요. 146 | 147 | 148 | ## 마지막 당부: 당신이 좋아하는 영어 텍스트를 읽으세요 149 | 150 | 영어는 재능이 아니라 노출의 문제입니다. 매일 15분씩 3개월이면 22.5시간. 하루에 3시간씩 일주일 공부하는 것과 같은 시간입니다. 하지만 효과는 훨씬 큽니다. 151 | 152 | **왜냐하면**: 153 | - 매일 하면 잊어버릴 틈이 없음 154 | - 실제 필요한 것만 배움 155 | - 바로 써먹을 수 있음 156 | - 성취감이 즉시 느껴짐 157 | 158 | 하지만 습관적으로 영어를 읽는 루틴을 만들기가 쉽지 않습니다. 특히 강제력이 없다면요. 그렇기 때문에 자발적으로 영어를 읽을 수 있는 기회를 하나쯤 만들어두시면 크게 도움이 됩니다. 159 | 160 | 영어로 된 소설이든 신문이든 기술 블로그든 **당신이 좋아하는 텍스트를 읽으세요.** 그게 가장 영어를 쉽고 빠르게 공부하고, 그리고 영어 공부 자체를 습관화하는 방법입니다. 161 | 162 | ## 실패해도 괜찮다 163 | 164 | 3개월 플랜을 시작했다가 며칠 못 하고 그만둬도 괜찮습니다. 다시 시작하면 되니까요. 165 | 166 | 중요한 건 "영어 못 해서 개발 못 한다", "영어 안 해도 개발할 수 있다"는 변명을 그만두는겁니다. 167 | 168 | **오늘 GitHub Trending 페이지 열어보는 것부터 시작해보시겠어요?** 169 | 170 | --- 171 | 172 | *"The best time to plant a tree was 20 years ago. The second best time is now."* 173 | 174 | *나무를 심기 가장 좋은 때는 20년 전이었다. 두 번째로 좋은 때는 바로 지금이다.* 175 | 176 | 영어도 마찬가지입니다. 시작하세요. 지금 당장. 177 | 178 | --- 179 | 180 | [⬅ 이전: 4편 단어장이 아니라 문장이다](/04-sentences/) | [다음: 6편 녹슬지 않는 기술 영어 만들기 ➡](/06-keep-fresh/) -------------------------------------------------------------------------------- /06. 녹슬지 않는 기술 영어 만들기.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "06. 녹슬지 않는 기술 영어 만들기" 3 | layout: default 4 | nav_order: 6 5 | permalink: "/06-keep-fresh/" 6 | --- 7 | 8 | # 6편: 녹슬지 않는 기술 영어 만들기 9 | 10 | ## 3개월의 마법, 그 후의 현실 11 | 12 | 5편까지 따라오셨다면 이제 공식문서를 읽을 수 있게 되셨을 겁니다. 축하드립니다! 그런데... 13 | 14 | 언어는 근육과 같습니다. 안 쓰면 금방 퇴화해요. 15 | 16 | ## 그럼 앞으로도 영어를 꾸역꾸역 계속 해야 하나요? 17 | 18 | 1편에서 말했듯이 사람들은 종종 스스로의 문제를 스스로 만듭니다. 꾸역꾸역 하면 당연히 하기 싫죠. 19 | 20 | 강제력을 띄는 학습은 길게 가지 못합니다. 즐길 수 있어야 오래할수 있어요. 제가 5편에서 **좋아하는 텍스트를 읽어라**고 했죠? 21 | 22 | 예를 들면 이런 것들을 해보세요: 23 | - GothamChess같은 재밌는 유튜버의 체스 방송 보기 24 | - Hacker News에서 드라마 같은 스타트업 망한 썰 읽기 25 | - Reddit r/programming에서 개발자들 키배 구경하기 26 | - GitHub issue에서 maintainer와 contributor 싸우는 거 보기 27 | - Stack Overflow에서 Jon Skeet의 전설적인 답변 읽기 28 | 29 | **"아, 재밌는 걸 듣고, 읽으면 되는구나!"** 30 | 31 | 뭐 평소에 기술 관련 글은 죽어도 읽기 싫다면, 좋아요. 안 읽어도 돼요. 32 | 대신 당신이 좋아하는 텍스트를 찾으세요! 애니메이션이든, 소설이든, 영화든... 사실 하나쯤은 있을거에요. 33 | 34 | ## 개발자를 위한 영어 유지 전략 35 | 36 | ### 재미로 시작하기 37 | ``` 38 | Before (의무감): 39 | "오늘도 영어 공부해야지... Medium 기술 아티클 읽어야지..." 40 | → 3일 만에 포기 41 | 42 | After (재미): 43 | "와 이 사람 PostgreSQL로 Doom 돌렸대 ㅋㅋㅋ" 44 | "Rust vs Go 또 싸우네, 댓글 구경 가야지" 45 | → 자연스럽게 매일 읽게 됨 46 | ``` 47 | 48 | ### 내가 실제로 하는 루틴 49 | 50 | **아침에 일어나서 디스코드 웹훅으로 온 해커뉴스 확인** 51 | ``` 52 | Hacker News 훑어보기 53 | - 제목만 봐도 재밌는 거 클릭 54 | - "Show HN: I built..." 포스트 구경 55 | - 댓글에서 진짜 인사이트 얻기 56 | ``` 57 | 58 | **점심 먹으면서** 59 | ``` 60 | GitHub Trending 구경 61 | - Star 폭발한 프로젝트 README 읽기 62 | - "왜 갑자기 뜨지?" 궁금증 해결 63 | - Issue 탭에서 사람들 반응 보기 64 | ``` 65 | 66 | **자기 전 (15분)** 67 | ``` 68 | Reddit 개발 서브레딧 69 | - r/programminghumor (개발자 밈) 70 | - r/cscareerquestions (연봉 자랑 & 고민) 71 | - r/webdev (최신 트렌드 논쟁) 72 | ``` 73 | 74 | 이게 공부인가요? 아니에요. 그냥 재밌어서 보는 거예요. 근데 이게 쌓이면 영어 실력이 됩니다. 75 | 76 | ## 영어를 쓸 수밖에 없는 환경 만들기 77 | 78 | ### 수동적이지만 필수인 것들 79 | ```javascript 80 | // 이전: 한글 주석 81 | // 사용자 정보를 가져오는 함수 82 | 83 | // 이후: 영어 주석 (commit 메시지도) 84 | // Fetch user information from database 85 | // Returns null if user doesn't exist 86 | ``` 87 | 88 | VSCode 설정도 영어로: 89 | - 에러 메시지가 영어로 나옴 90 | - 구글링할 때 복붙하기 편함 91 | - 자연스럽게 영어 표현 익힘 92 | 93 | ### 능동적이지만 부담 없는 것들 94 | 95 | **GitHub에서 놀기**: 96 | ``` 97 | Level 1: Star 누르고 Watch하기 98 | Level 2: Issue에 "Thanks! This helped me" 댓글 99 | Level 3: README 오타 수정 PR 100 | Level 4: 버그 리포트 작성 101 | Level 5: 기능 제안하기 102 | ``` 103 | 104 | 105 | ## 실패해도 되는 이유 106 | 107 | 원어민들도 문법 틀립니다. 여러분들은 한국어 문법을 존중하나요? 띄어쓰기를 철저하게 지켜 글을 작성하나요? 그러지 않죠. 108 | 당신의 목적은 영어 시험을 보는게 아니라 소통이니, 좀 틀려도 대개 의미가 통합니다. 109 | 누가 문법 틀렸다고 하면 이렇게 말하세요. `"난 너희랑 소통하려고 영어 배우는건데 문법까지 배우라고 하냐? 너희가 한국어 배워와!"` 110 | 111 | **결론: 개발자들은 문법 신경 안 씀. 코드가 맞으면 됨.** 112 | 113 | ## 이 모든 걸 가능하게 하는 마인드셋 114 | 115 | ### ❌ 하지 말아야 할 생각 116 | - "영어 실력 유지해야지" (의무감) 117 | - "매일 1시간씩 공부해야지" (부담) 118 | - "완벽한 영어 써야지" (압박) 119 | 120 | ### ✅ 가져야 할 생각 121 | - "이거 재밌겠는데?" (호기심) 122 | - "남들은 뭐라고 하지?" (관심) 123 | - "나도 한마디 해볼까?" (참여) 124 | 125 | 126 | ## 진짜 마지막 조언 127 | 128 | 동료가 물어봤습니다: 129 | "영어 어떻게 유지해요?" 130 | 131 | "유지한다고 생각한 적 없는데... 그냥 재밌는 거 보다 보니까?" 132 | 133 | 이게 정답입니다. **유지하려고 하지 마세요. 즐기세요.** 134 | 135 | 프로그래밍도 그렇잖아요. "코딩 실력 유지해야지"라고 생각하면서 코딩하나요? 아니죠. 만들고 싶은 게 있어서, 궁금한 게 있어서, 문제를 해결하고 싶어서 코딩하죠. 136 | 137 | 영어도 똑같습니다. 138 | 139 | ## 오늘 당장 시작하기 140 | 141 | 1. Hacker News 북마크하기 142 | 2. Reddit 계정 만들기 (lurker로 시작해도 OK) 143 | 3. GitHub Trending 페이지 열어보기 144 | 4. 재밌어 보이는 거 하나 클릭 145 | 146 | 이게 끝입니다. 147 | 148 | "영어 유지"가 아니라 "개발 문화 즐기기"라고 생각하세요. 149 | 150 | 어차피 우리가 좋아하는 개발 이야기는 다 영어로 먼저 나오니까요. 151 | 152 | --- 153 | 154 | *P.S. 이 글을 쓰는 동안에도 Hacker News에 "My startup failed after 2 years, here's what I learned" 같은 글이 올라왔을 겁니다. 안 궁금하세요? 저는 벌써 읽고 왔습니다.* 155 | 156 | [⬅ 이전: 5편: 마스터플랜 - 실전에서 살아남기](/05-masterplan/) -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # 기여 가이드 (Contributing Guide) 2 | 3 | 이 프로젝트는 기술 영어 학습 문서 모음입니다. 모든 기여는 **CC BY-SA 4.0** 조건 하에서 공유됩니다. Pull Request를 생성하는 순간 해당 조건에 동의한 것으로 간주합니다. 4 | 5 | ## 철학 6 | - 독자가 빠르게 핵심을 이해하도록 간결함 우선 7 | - 기계번역 어색함 제거, 공식 용어 원형 유지 8 | - 불필요한 장문 설명보다 예시/패턴 제시 9 | 10 | ## 문체 (Style) 11 | - 반말/존댓말 혼합 대신 현재 README/본문 톤 유지 (설명체 + 가벼운 대화체) 12 | - 과도한 영어 직역 피하고 핵심 용어는 그대로: *Promise, Semaphore, Mutex* 13 | - 한국어 어순 부자연스러운 직역 금지 14 | 15 | ## 범주별 PR 타입 16 | ``` 17 | feat: 새로운 절/큰 단락 추가 18 | fix: 사실 오류/오탈자 수정 19 | refactor: 문장 구조 개선 (의미 동일) 20 | style: 포맷/띄어쓰기/목록 정리 21 | docs: 메타 문서(README, CONTRIBUTING) 수정 22 | ``` 23 | 24 | ## 제출 전 체크리스트 25 | - [ ] 링크 깨짐 없음 (상대경로 대신 퍼머링크 사용 여부) 26 | - [ ] 용어 일관성 (이전 챕터와 동일 표기) 27 | - [ ] Markdown 목록/코드 블럭 렌더 정상 28 | - [ ] 변화 범위 최소 (비관련 리포맷 제거) 29 | - [ ] 큰 추가(>150줄)라면 Issue 또는 Draft PR 선행 30 | 31 | ## 기술 용어 가이드 32 | | 유지 | 피하기 | 비고 | 33 | |------|--------|------| 34 | | Semaphore | 신호기 | 음차 유지 | 35 | | Promise | 약속 | 의미 혼동 방지 | 36 | | Mutex | 상호배제 락(설명시) | 뮤텍스(OK) | 두 형태 혼용 가능, 최초 설명시 병기 | 37 | | Cache | 은닉처 | 캐시 고정 | 38 | 39 | ## 인용 / 출처 40 | - 외부 문장 직인용: `>` 블록 + URL 41 | - 번역/요약: 원문 링크와 "(요약)" 표시 42 | 43 | ## 라이선스 명시 44 | 본문/파생물 재배포 시: `출처: English for IT (원문: ), CC BY-SA 4.0` 표기 45 | 46 | ## 리뷰 프로세스 47 | 1. 의미/사실 검증 48 | 2. 용어/일관성 49 | 3. 문체 50 | 4. 맞춤법 & 포맷 51 | 52 | ## 거절될 수 있는 PR 예시 53 | - 광고/홍보 목적 추가 54 | - 과도한 장식, 밈 위주 내용 55 | - README/라이선스와 충돌하는 규칙 제안 56 | 57 | ## 질문 58 | Issue에 `question` 라벨을 붙여 주세요. 59 | 60 | 감사합니다. 작은 수정 하나도 의미 있습니다! 61 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "jekyll", "~> 4.3" 4 | # Useful plugins (Netlify safe) - add more later if needed 5 | # gem "jekyll-paginate" 6 | # gem "jekyll-sitemap" 7 | # gem "jekyll-feed" 8 | 9 | group :jekyll_plugins do 10 | gem "jekyll-seo-tag", "~> 2.8" 11 | end 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Attribution-ShareAlike 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More_considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution-ShareAlike 4.0 International Public 58 | License 59 | 60 | By exercising the Licensed Rights (defined below), You accept and agree 61 | to be bound by the terms and conditions of this Creative Commons 62 | Attribution-ShareAlike 4.0 International Public License ("Public 63 | License"). To the extent this Public License may be interpreted as a 64 | contract, You are granted the Licensed Rights in consideration of Your 65 | acceptance of these terms and conditions, and the Licensor grants You 66 | such rights in consideration of benefits the Licensor receives from 67 | making the Licensed Material available under these terms and 68 | conditions. 69 | 70 | 71 | Section 1 -- Definitions. 72 | 73 | a. Adapted Material means material subject to Copyright and Similar 74 | Rights that is derived from or based upon the Licensed Material 75 | and in which the Licensed Material is translated, altered, 76 | arranged, transformed, or otherwise modified in a manner requiring 77 | permission under the Copyright and Similar Rights held by the 78 | Licensor. For purposes of this Public License, where the Licensed 79 | Material is a musical work, performance, or sound recording, 80 | Adapted Material is always produced where the Licensed Material is 81 | synched in timed relation with a moving image. 82 | 83 | b. Adapter's License means the license You apply to Your Copyright 84 | and Similar Rights in Your contributions to Adapted Material in 85 | accordance with the terms and conditions of this Public License. 86 | 87 | c. BY-SA Compatible License means a license listed at 88 | creativecommons.org/compatiblelicenses, approved by Creative 89 | Commons as essentially the equivalent of this Public License. 90 | 91 | d. Copyright and Similar Rights means copyright and/or similar rights 92 | closely related to copyright including, without limitation, 93 | performance, broadcast, sound recording, and Sui Generis Database 94 | Rights, without regard to how the rights are labeled or 95 | categorized. For purposes of this Public License, the rights 96 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 97 | Rights. 98 | 99 | e. Effective Technological Measures means those measures that, in the 100 | absence of proper authority, may not be circumvented under laws 101 | fulfilling obligations under Article 11 of the WIPO Copyright 102 | Treaty adopted on December 20, 1996, and/or similar international 103 | agreements. 104 | 105 | f. Exceptions and Limitations means fair use, fair dealing, and/or 106 | any other exception or limitation to Copyright and Similar Rights 107 | that applies to Your use of the Licensed Material. 108 | 109 | g. License Elements means the license attributes listed in the name 110 | of a Creative Commons Public License. The License Elements of this 111 | Public License are Attribution and ShareAlike. 112 | 113 | h. Licensed Material means the artistic or literary work, database, 114 | or other material to which the Licensor applied this Public 115 | License. 116 | 117 | i. Licensed Rights means the rights granted to You subject to the 118 | terms and conditions of this Public License, which are limited to 119 | all Copyright and Similar Rights that apply to Your use of the 120 | Licensed Material and that the Licensor has authority to license. 121 | 122 | j. Licensor means the individual(s) or entity(ies) granting rights 123 | under this Public License. 124 | 125 | k. Share means to provide material to the public by any means or 126 | process that requires permission under the Licensed Rights, such 127 | as reproduction, public display, public performance, distribution, 128 | dissemination, communication, or importation, and to make material 129 | available to the public including in ways that members of the 130 | public may access the material from a place and at a time 131 | individually chosen by them. 132 | 133 | l. Sui Generis Database Rights means rights other than copyright 134 | resulting from Directive 96/9/EC of the European Parliament and of 135 | the Council of 11 March 1996 on the legal protection of databases, 136 | as amended and/or succeeded, as well as other essentially 137 | equivalent rights anywhere in the world. 138 | 139 | m. You means the individual or entity exercising the Licensed Rights 140 | under this Public License. Your has a corresponding meaning. 141 | 142 | 143 | Section 2 -- Scope. 144 | 145 | a. License grant. 146 | 147 | 1. Subject to the terms and conditions of this Public License, 148 | the Licensor hereby grants You a worldwide, royalty-free, 149 | non-sublicensable, non-exclusive, irrevocable license to 150 | exercise the Licensed Rights in the Licensed Material to: 151 | 152 | a. reproduce and Share the Licensed Material, in whole or 153 | in part; and 154 | 155 | b. produce, reproduce, and Share Adapted Material. 156 | 157 | 2. Exceptions and Limitations. For the avoidance of doubt, where 158 | Exceptions and Limitations apply to Your use, this Public 159 | License does not apply, and You do not need to comply with 160 | its terms and conditions. 161 | 162 | 3. Term. The term of this Public License is specified in Section 163 | 6(a). 164 | 165 | 4. Media and formats; technical modifications allowed. The 166 | Licensor authorizes You to exercise the Licensed Rights in 167 | all media and formats whether now known or hereafter created, 168 | and to make technical modifications necessary to do so. The 169 | Licensor waives and/or agrees not to assert any right or 170 | authority to forbid You from making technical modifications 171 | necessary to exercise the Licensed Rights, including 172 | technical modifications necessary to circumvent Effective 173 | Technological Measures. For purposes of this Public License, 174 | simply making modifications authorized by this Section 2(a) 175 | (4) never produces Adapted Material. 176 | 177 | 5. Downstream recipients. 178 | 179 | a. Offer from the Licensor -- Licensed Material. Every 180 | recipient of the Licensed Material automatically 181 | receives an offer from the Licensor to exercise the 182 | Licensed Rights under the terms and conditions of this 183 | Public License. 184 | 185 | b. Additional offer from the Licensor -- Adapted Material. 186 | Every recipient of Adapted Material from You 187 | automatically receives an offer from the Licensor to 188 | exercise the Licensed Rights in the Adapted Material 189 | under the conditions of the Adapter's License You apply. 190 | 191 | c. No downstream restrictions. You may not offer or impose 192 | any additional or different terms or conditions on, or 193 | apply any Effective Technological Measures to, the 194 | Licensed Material if doing so restricts exercise of the 195 | Licensed Rights by any recipient of the Licensed 196 | Material. 197 | 198 | 6. No endorsement. Nothing in this Public License constitutes or 199 | may be construed as permission to assert or imply that You 200 | are, or that Your use of the Licensed Material is, connected 201 | with, or sponsored, endorsed, or granted official status by, 202 | the Licensor or others designated to receive attribution as 203 | provided in Section 3(a)(1)(A)(i). 204 | 205 | b. Other rights. 206 | 207 | 1. Moral rights, such as the right of integrity, are not 208 | licensed under this Public License, nor are publicity, 209 | privacy, and/or other similar personality rights; however, to 210 | the extent possible, the Licensor waives and/or agrees not to 211 | assert any such rights held by the Licensor to the limited 212 | extent necessary to allow You to exercise the Licensed 213 | Rights, but not otherwise. 214 | 215 | 2. Patent and trademark rights are not licensed under this 216 | Public License. 217 | 218 | 3. To the extent possible, the Licensor waives any right to 219 | collect royalties from You for the exercise of the Licensed 220 | Rights, whether directly or through a collecting society 221 | under any voluntary or waivable statutory or compulsory 222 | licensing scheme. In all other cases the Licensor expressly 223 | reserves any right to collect such royalties. 224 | 225 | 226 | Section 3 -- License Conditions. 227 | 228 | Your exercise of the Licensed Rights is expressly made subject to the 229 | following conditions. 230 | 231 | a. Attribution. 232 | 233 | 1. If You Share the Licensed Material (including in modified 234 | form), You must: 235 | 236 | a. retain the following if it is supplied by the Licensor 237 | with the Licensed Material: 238 | 239 | i. identification of the creator(s) of the Licensed 240 | Material and any others designated to receive 241 | attribution, in any reasonable manner requested by 242 | the Licensor (including by pseudonym if 243 | designated); 244 | 245 | ii. a copyright notice; 246 | 247 | iii. a notice that refers to this Public License; 248 | 249 | iv. a notice that refers to the disclaimer of 250 | warranties; 251 | 252 | v. a URI or hyperlink to the Licensed Material to the 253 | extent reasonably practicable; 254 | 255 | b. indicate if You modified the Licensed Material and 256 | retain an indication of any previous modifications; and 257 | 258 | c. indicate the Licensed Material is licensed under this 259 | Public License, and include the text of, or the URI or 260 | hyperlink to, this Public License. 261 | 262 | 2. You may satisfy the conditions in Section 3(a)(1) in any 263 | reasonable manner based on the medium, means, and context in 264 | which You Share the Licensed Material. For example, it may be 265 | reasonable to satisfy the conditions by providing a URI or 266 | hyperlink to a resource that includes the required 267 | information. 268 | 269 | 3. If requested by the Licensor, You must remove any of the 270 | information required by Section 3(a)(1)(A) to the extent 271 | reasonably practicable. 272 | 273 | b. ShareAlike. 274 | 275 | In addition to the conditions in Section 3(a), if You Share 276 | Adapted Material You produce, the following conditions also apply. 277 | 278 | 1. The Adapter's License You apply must be a Creative Commons 279 | license with the same License Elements, this version or 280 | later, or a BY-SA Compatible License. 281 | 282 | 2. You must include the text of, or the URI or hyperlink to, the 283 | Adapter's License You apply. You may satisfy this condition 284 | in any reasonable manner based on the medium, means, and 285 | context in which You Share Adapted Material. 286 | 287 | 3. You may not offer or impose any additional or different terms 288 | or conditions on, or apply any Effective Technological 289 | Measures to, Adapted Material that restrict exercise of the 290 | rights granted under the Adapter's License You apply. 291 | 292 | 293 | Section 4 -- Sui Generis Database Rights. 294 | 295 | Where the Licensed Rights include Sui Generis Database Rights that 296 | apply to Your use of the Licensed Material: 297 | 298 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 299 | to extract, reuse, reproduce, and Share all or a substantial 300 | portion of the contents of the database; 301 | 302 | b. if You include all or a substantial portion of the database 303 | contents in a database in which You have Sui Generis Database 304 | Rights, then the database in which You have Sui Generis Database 305 | Rights (but not its individual contents) is Adapted Material, 306 | 307 | including for purposes of Section 3(b); and 308 | c. You must comply with the conditions in Section 3(a) if You Share 309 | all or a substantial portion of the contents of the database. 310 | 311 | For the avoidance of doubt, this Section 4 supplements and does not 312 | replace Your obligations under this Public License where the Licensed 313 | Rights include other Copyright and Similar Rights. 314 | 315 | 316 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 317 | 318 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 319 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 320 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 321 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 322 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 323 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 324 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 325 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 326 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 327 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 328 | 329 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 330 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 331 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 332 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 333 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 334 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 335 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 336 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 337 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 338 | 339 | c. The disclaimer of warranties and limitation of liability provided 340 | above shall be interpreted in a manner that, to the extent 341 | possible, most closely approximates an absolute disclaimer and 342 | waiver of all liability. 343 | 344 | 345 | Section 6 -- Term and Termination. 346 | 347 | a. This Public License applies for the term of the Copyright and 348 | Similar Rights licensed here. However, if You fail to comply with 349 | this Public License, then Your rights under this Public License 350 | terminate automatically. 351 | 352 | b. Where Your right to use the Licensed Material has terminated under 353 | Section 6(a), it reinstates: 354 | 355 | 1. automatically as of the date the violation is cured, provided 356 | it is cured within 30 days of Your discovery of the 357 | violation; or 358 | 359 | 2. upon express reinstatement by the Licensor. 360 | 361 | For the avoidance of doubt, this Section 6(b) does not affect any 362 | right the Licensor may have to seek remedies for Your violations 363 | of this Public License. 364 | 365 | c. For the avoidance of doubt, the Licensor may also offer the 366 | Licensed Material under separate terms or conditions or stop 367 | distributing the Licensed Material at any time; however, doing so 368 | will not terminate this Public License. 369 | 370 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 371 | License. 372 | 373 | 374 | Section 7 -- Other Terms and Conditions. 375 | 376 | a. The Licensor shall not be bound by any additional or different 377 | terms or conditions communicated by You unless expressly agreed. 378 | 379 | b. Any arrangements, understandings, or agreements regarding the 380 | Licensed Material not stated herein are separate from and 381 | independent of the terms and conditions of this Public License. 382 | 383 | 384 | Section 8 -- Interpretation. 385 | 386 | a. For the avoidance of doubt, this Public License does not, and 387 | shall not be interpreted to, reduce, limit, restrict, or impose 388 | conditions on any use of the Licensed Material that could lawfully 389 | be made without permission under this Public License. 390 | 391 | b. To the extent possible, if any provision of this Public License is 392 | deemed unenforceable, it shall be automatically reformed to the 393 | minimum extent necessary to make it enforceable. If the provision 394 | cannot be reformed, it shall be severed from this Public License 395 | without affecting the enforceability of the remaining terms and 396 | conditions. 397 | 398 | c. No term or condition of this Public License will be waived and no 399 | failure to comply consented to unless expressly agreed to by the 400 | Licensor. 401 | 402 | d. Nothing in this Public License constitutes or may be interpreted 403 | as a limitation upon, or waiver of, any privileges and immunities 404 | that apply to the Licensor or You, including from the legal 405 | processes of any jurisdiction or authority. 406 | 407 | 408 | ======================================================================= 409 | 410 | Creative Commons is not a party to its public 411 | licenses. Notwithstanding, Creative Commons may elect to apply one of 412 | its public licenses to material it publishes and in those instances 413 | will be considered the “Licensor.” The text of the Creative Commons 414 | public licenses is dedicated to the public domain under the CC0 Public 415 | Domain Dedication. Except for the limited purpose of indicating that 416 | material is shared under a Creative Commons public license or as 417 | otherwise permitted by the Creative Commons policies published at 418 | creativecommons.org/policies, Creative Commons does not authorize the 419 | use of the trademark "Creative Commons" or any other trademark or logo 420 | of Creative Commons without its prior written consent including, 421 | without limitation, in connection with any unauthorized modifications 422 | to any of its public licenses or any other arrangements, 423 | understandings, or agreements concerning use of licensed material. For 424 | the avoidance of doubt, this paragraph does not form part of the 425 | public licenses. 426 | 427 | Creative Commons may be contacted at creativecommons.org. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # English for IT (Jekyll + Netlify) 2 | 3 | 이 저장소는 기술 영어 학습 가이드를 정적 사이트(Jekyll)로 배포하기 위한 구조입니다. 4 | 5 | ## 구조 6 | ``` 7 | Gemfile 8 | _config.yml 9 | netlify.toml 10 | index.md # 랜딩 페이지 11 | 00. 개요.md # 각 글 (YAML front matter 포함) 12 | 01. 당신의 당신의 문제를 스스로 만든다.md 13 | 02. 번역기의 배신.md 14 | ... (계속) 15 | _layouts/ 16 | _includes/ 17 | assets/css/style.css 18 | ``` 19 | 20 | ## 로컬 개발 21 | Prerequisite: Ruby (>=3.1) & Bundler 22 | 23 | ```powershell 24 | # 의존성 설치 25 | bundle install 26 | 27 | # 개발 서버 실행 28 | bundle exec jekyll serve --livereload 29 | # 브라우저에서 http://127.0.0.1:4000 확인 30 | ``` 31 | 32 | ## Netlify 배포 33 | 1. Netlify에서 New site from Git 34 | 2. 저장소 선택 35 | 3. Build command: `bundle exec jekyll build` 36 | 4. Publish directory: `_site` 37 | 5. 환경변수 (자동 설정됨): `JEKYLL_ENV=production` 38 | 39 | `netlify.toml` 에 설정이 포함되어 있어 추가 설정 없이 배포됩니다. 40 | 41 | ### (선택) minima 테마 사용하고 싶다면? 42 | 현재 `_config.yml` 에서 `theme: minima` 를 제거하여 커스텀 레이아웃(`_layouts/default.html`)만 사용합니다. 만약 minima 기반으로 가고 싶다면: 43 | 44 | 1. Gemfile 최상단에 아래 추가: 45 | ```ruby 46 | gem "minima", "~> 2.5" 47 | ``` 48 | 2. `_config.yml` 에 `theme: minima` 다시 추가 49 | 3. 필요시 `_includes/nav.html` / `_layouts/default.html` 수정 또는 삭제 (minima의 기본 레이아웃 사용) 50 | 4. `bundle install` 후 다시 배포 51 | 52 | 테마를 잇는 대신 현재 방식은 불필요한 의존성을 줄여 빌드 속도를 약간 단축합니다. 53 | 54 | ## 중복 파일 관련 55 | `01.` 챕터 파일이 두 개 존재했으나 (`01. 당신의 당신의 문제를 스스로 만든다.md` / 오타 변형) 현재 `01. 당신의 당신의 문제를 스스로 만든다.md` 파일을 canonical 로 간주합니다. 다른 변형은 필요시 삭제하거나 redirect 구성을 할 수 있습니다. 56 | 57 | ## 향후 개선 아이디어 58 | - 다국어(i18n) 지원 (영문 번역 추가) 59 | - 검색 기능 (lunr.js) 60 | - RSS feed (`jekyll-feed` 플러그인) 61 | - Sitemap (`jekyll-sitemap`) 62 | 63 | ## 라이선스 64 | 이 문서 모음은 **Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)** 라이선스를 따릅니다. 65 | 66 | 요약: 67 | - 출처(프로젝트명: "English for IT", 원문 저장소 링크) 표기 필수 68 | - 변경/수정 시 변경사항 명시 69 | - 동일 조건(ShareAlike)으로 2차 저작물 공개 - 카피레프트 라이선스입니다. 70 | - 코드 스니펫이 매우 짧은 예제 수준이라면 (저작권 보호 한계 영역) 자유롭게 사용 가능하나 가능하면 출처 유지 권장 71 | 72 | 정식 전문: https://creativecommons.org/licenses/by-sa/4.0/ 73 | 74 | 논리 구조(목차 순서), 글의 흐름, 문체는 저작권 보호 대상이며 CC BY-SA 조건 하에서만 재배포/수정 가능합니다. 75 | 76 | ## 기여(Contribution) 가이드 77 | 교정, 오탈자 수정, 표현 개선, 내용 확장 Pull Request 환영합니다. 78 | 79 | 자세한 내용은 [CONTRIBUTING.md](./CONTRIBUTING.md) 참고하세요. 80 | 81 | ## 빠른 시작 (기여자용 체크리스트) 82 | 1. Issue 또는 PR 초안 생성 (큰 변경 시 권장) 83 | 2. 로컬 브랜치 생성: `feat/semaphore-section-update` 형식 권장 84 | 3. 수정 후 미리보기: `bundle exec jekyll serve` 85 | 4. 자체 검수: 링크 / 맞춤법 / 용어 일관성 86 | 5. PR 템플릿 형식에 맞춰 설명 (없는 경우 첫 줄에 타입 작성) 87 | 88 | 감사합니다! 여러분의 작은 기여가 문서를 더 정확하고 읽기 쉽게 만듭니다. 89 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | title: "English for IT" 2 | description: "기술 영어 학습 가이드" 3 | lang: ko-KR 4 | baseurl: "" # Netlify root 5 | url: "" # Will be set by Netlify 6 | markdown: kramdown 7 | license: "CC BY-SA 4.0" 8 | plugins: 9 | - jekyll-seo-tag 10 | permalink: pretty 11 | collections: 12 | pages: 13 | output: true 14 | permalink: /:path/ 15 | exclude: 16 | - Gemfile 17 | - Gemfile.lock 18 | - netlify.toml 19 | - README.md 20 | - LICENSE 21 | 22 | # Navigation order (used by custom include) 23 | nav_order: 24 | - 00. 개요 25 | - 01. 당신이 당신의 문제를 스스로 만든다 26 | - 02. 번역기의 배신 27 | - 03. 영어가 아니라 기술 영어다 28 | - 04. 단어장이 아니라 문장이다 29 | - 05. 마스터플랜 - 실전에서 살아남기 30 | - 06. 녹슬지 않는 기술 영어 만들기 31 | -------------------------------------------------------------------------------- /_includes/nav.html: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {% if page.title %}{{ page.title }} | {{ site.title }}{% else %}{{ site.title }}{% endif %} 7 | {% seo %} 8 | 9 | 10 | 11 | 15 |
16 |
17 |

{{ page.title }}

18 | {{ content }} 19 |
20 |
21 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /assets/css/style.css: -------------------------------------------------------------------------------- 1 | body { font-family: system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Ubuntu,"Helvetica Neue",Arial,sans-serif; line-height: 1.6; margin:0; color:#222; } 2 | .site-header, .site-footer { background:#111; color:#eee; padding:1rem 1.25rem; } 3 | .site-header a, .site-footer a { color:#61dafb; text-decoration:none; } 4 | .site-title { margin:0 0 .5rem 0; font-size:1.25rem; } 5 | .site-nav ul { list-style:none; margin:0; padding:0; display:flex; flex-wrap:wrap; gap:.75rem; } 6 | .site-nav a { color:#eee; padding:.25rem .5rem; border-radius:4px; font-size:.9rem; } 7 | .site-nav a.active, .site-nav a:hover { background:#222; } 8 | main { max-width: 860px; margin:0 auto; padding:1.5rem 1.25rem 3rem; } 9 | .page-title { margin-top:0; } 10 | pre, code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; background:#f5f5f5; } 11 | pre { padding:1rem; overflow:auto; border-radius:6px; } 12 | code { padding:.2em .4em; border-radius:4px; } 13 | a { color:#1558d6; } 14 | a:hover { text-decoration:underline; } 15 | hr { border:none; border-top:1px solid #ddd; margin:2.5rem 0; } 16 | @media (max-width:640px){ .site-nav ul{ gap:.5rem; } } 17 | -------------------------------------------------------------------------------- /index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "English for IT" 4 | nav_order: -1 5 | permalink: "/" 6 | --- 7 | 8 | # English for IT 9 | 10 | 이 사이트는 개발자를 위한 기술 영어 학습 연재물을 정리한 것입니다. 아래 순서대로 읽어보세요. 11 | 12 | ## 목차 13 | 14 | 1. [개요](/00-intro/) 15 | 2. [1편: 당신이 당신의 문제를 스스로 만든다](/01-problem/) 16 | 3. [2편: 번역기의 배신](/02-translation/) 17 | 4. [3편: 영어가 아니라 기술 영어다](/03-tech-english/) 18 | 5. [4편: 단어장이 아니라 문장이다](/04-sentences/) 19 | 6. [5편: 마스터플랜 - 실전에서 살아남기](/05-masterplan/) 20 | 7. [6편: 녹슬지 않는 기술 영어 만들기](/06-keep-fresh/) 21 | 22 | --- 23 | 24 | 소스코드는 GitHub 저장소를 참고하세요. 25 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "_site" 3 | command = "bundle exec jekyll build" 4 | 5 | [build.environment] 6 | JEKYLL_ENV = "production" 7 | RUBY_VERSION = "3.2.2" 8 | 9 | [context.production.environment] 10 | JEKYLL_ENV = "production" 11 | 12 | [context.deploy-preview] 13 | command = "bundle exec jekyll build" 14 | 15 | [[redirects]] 16 | from = "/index.html" 17 | to = "/" 18 | status = 301 19 | --------------------------------------------------------------------------------