YOUTHCON'20
EVENT SCHEDULE
세션 정보는 지속해서 업데이트됩니다.
오후 1:45 ~ 2:00: 행사 입장 및 축사
오후 2:00 ~ 2:20: 주니어 개발자 이직기
👨💻 컴공돌이
💬 학생 때 인턴 시작부터 스타트업에 첫 취업을 하게 되고 이직을 결심하게 된 계기부터, 어떻게 일과 병행하면서 공부와 이직 준비를 하였는지, 퇴사는 어떻게 하였는지를 공유합니다. 또 이직 후 어려웠던 점이나, 전 회사에서 내가 성장했다고 알게 되었던 점 등을 소개합니다.
오후 2:30 ~ 2:50: MySQL Isolation, Lock
👨💻 오길환
💬 친구가 개발하고 있는 예약 사이트 코드 리뷰 중 발견한 문제점! 하나의 물건을 여러 명이 예약이 가능했다...! 해당 문제를 해결하기 위해 간단히 적용한 lock에 대해서 알아보고, 나아가서 isolation에 대해서 간단히 알아봅니다!
오후 2:00 ~ 2:50: 스프링부트로 게시판 만들기 (Hands-On Lab)
👨🎓 김가람(한솔교육)
👨🏫 류성현(우아한형제들)
💬 스프링부트가 익숙하지 않은 주니어 개발자가 게시판 만들기를 통해 스프링부트를 학습하는 경험을 공유합니다. 프로젝트 설정부터 기능 구현을 하는 과정에서 생기는 궁금증과 깨달음을 함께 나누어 보아요.
저장소: https://github.com/boorownie/spring-boot-blog
오후 3:00 ~ 3:20: 하반기 채용에 깨진 멘탈 다시 붙인 썰
👨💻 최장훈(가천대학교)
💬 뜨거운 하반기 채용에 치즈 퐁듀처럼 녹은 멘탈, '이것'을 통해 복구하다? 발표 내용은 백기선님 자바 스터디 후기이지만, 스터디하면서 변화된 것을 중점적으로 발표합니다. 발표 대상은 하반기 채용에 실패해서 무엇을 할지 모르는 사람들, 스터디 참여를 망설이는 사람들, 무엇을 해야 할지 갈피가 잡히지 않는 사람들입니다.
오후 3:30 ~ 3:50: 어디 가서 코틀린 알은체하기
👨💻 박재성(Jason)(우아한형제들)
오후 3:00 ~ 3:50: 애플리케이션을 쿠버네티스에 배포하기 (Hands-On Lab)
👨🎓 홍은모(체커)
👨🏫 lugi(유쾌한 스프링방 모임 운영자)
💬 요즘 쿠버네티스가 유명하다는 이야기가 많이 들립니다. 써보려고 했더니 뭔가 복잡한 시스템 운영 이야기가 많습니다. 개발자가 쿠버네티스에 스프링 애플리케이션을 돌려 보려면 어떻게 해야 할지 신입 개발자의 눈높이에서 살펴봅니다.
저장소: https://github.com/MorrisHong/youthconn-demo
1. 컴공돌이, 주니어 개발자 이직기
xsinc회사 6개월 인턴
디스크리스(Diskless)란?
다중 PC 환경에서 HDD가 장착되지 않아도 중앙 서버에서 네트워크를 매개로 HDD가 있는 컴퓨터처럼 사용할 수 있게 해주는 것
헬스케어 스타트업 , Microsoftware 잡지 기고
퇴사를 결심한 계기
장점
1.워라밸 우수
2. 일의 과부하가 없음
3. 사람들이 좋음
4. 출퇴근이 자유로움
5. 개발 문화 및 사수 실력의 우수성
6. 괜찮은 연봉
단점
1. 성장 가능성이 안보임
2. 데이터 분석팀에 의존한 개발팀
3. 사수가 한명임
4. 네임밸류가 떨어짐 feat 안정성
5. 복지는 없음
이직준비
목표 우선순위 1순위가 연봉에서 -> 성장 가능성으로 바뀜
준비 깨알 팁
1. 알고리즘과 포트폴리오는 평소에
- 1일 1커밋을 알고리즘 코드로 함( 리코드, 프로그래머스, 백준 600문제를 품)
2. 자기 분야의 최신 정보 follow up
3. 면접 준비는 자신감 feat. 모의면접
- 디스코드
4. 휴가를 잘 써보자 feat 병가
5. 퇴직은 어떻게 하는게 좋은가?
퇴사 준비 방법
1. 퇴사는 한달 전에 통보 (feat. 법)
2. 못나가면 어떻게 하지 고민 X
3. 나 없으면 회사가 안돌아가 고민 X - 절대 그럴릴 없음
4. 인수인계는 확실히 O
- 문서화 잘하기
회사 말고 자기 개발
1. 해커톤 활동 - 현재는 코로나 때매 없음...
2. 멘토링 및 교육활동
- 연합 해커톤, 소프트웨어에 물들다..
3. 1일 1커밋
주중 : 알고리즘, 언어 공부 / 주말 : 해커톤, 개인프로젝트
4. 외주 & 개인 프로젝트
- 하나의 프로젝트를 고도화, 사용자의 피드백
1년 경력이지만 도움되었던 점
1. 전 회사의 좋은 개발 문화
2. 기획자 소통과 기획리뷰 경험
3. TDD 경험 & 코드리뷰
4. 개발과 공부에 집중할 수 있는 환경
회사 적응 어려웠던 점
1. 기간 산정의 어려움
2. 기존 프로젝트 파악의 어려움
- 사내 개발자들에게 도움 요청
3. 사람들과 친해지기
마무리 정리 - 이직을 하려면
1. 퇴사 이유를 명확히 파악 및 장단점 비교
2. 공부는 평소에, 툇 마음이 든다면 더 빡세게
3. 언젠간 다시 볼 수 있으므로 퇴사도 매너 있게
4. 회사에서 배운건 자기도 모르게 도움이 됨
5. 자기한테 100퍼센트 만족스러운 회사는 없다.
Q) 알고리즘은 한문제당 보통 몇시간을 두고 푸시나요?
2~3학년이면 6시간 ~ 하루종일이 적당한것 같습니다.
4학년 이후라면 1시간정도가 적당한것 같습니다.
Q) 유지보수가 주 업무인 곳에서는 포트폴리오를 어떻게 첨부하나요
유지보수가 메인인 곳에서는, 잘 모르겠네요
Q) 공부하면서 여자친구, 친구들을 만나는 방법
시험, 면접이 있는 경우는 여자친구에게 양해
여유가 있을땐 많이 만나는 편
오길환, MySQL Isolation, Lock
Isolation 이란
- 트랜잭션의 격리 수준
- A트랜잭션이 B트랜잭션에서 변경한 데이터를 볼 수 있도록 허용할 것인지 아닌지 결정
Isolation Level : 4가지
1. READ_UNCOMMITED
커밋전의 데이터 변경 내용을 다른 트랜잭션이 읽는 것을 허용
문제점
DIRTY_READ : 다른 트랜잭션에서 커밋되지 않은 데이터도 읽을 수 있다.
2. READ_COMMITED
커밋이 완료된 데이터를 다른 트랜잭션이 읽도록 허용
문제점
NON_REPEATABLE_READ
트랜잭션내에서 조회한 내용이 항상 동일하지 않은 현상
3. REPEATABLE_READ
트랜잭션 내에서 조회한 내용이 항상 동일한 결과를 표출
문제점
PHANTOM_READ
트랜잭션 내에서 이전에 조회한 결과에 없던 새로운 레코드가 나타는 현상
참고
mysql의 기본 level은 REPEATABLE_READ
PHANTOM_READ는 innoDB에서는 일반적으로 발생하지 않음
4. serializable : 순차적인 접근
트랜잭션이 읽고있는 데이터를 다른 트랜잭션에서 수정 추가 불가능
문제점
성능 저하
오토 커밋이 Off일 경우 조회한 데이터에 shared lock이 걸리면서
다른 트랜잭션이 데이터 변경 / 추가 불가로 인한 성능 저하
dirty_read 어떻게 막히죠?
데이터를 수정하면 원본은 Undo segment에 저장, 수정데이터는 데이터 파일에 저장
Lock
트랜잭션이 데이터에 접근하고 있을 떄, 다른 트랜잭션이 동시에 데이터에 접근하지 못하도록 막는것
1. shared lock
공유 잠금이라고 하며 대표적으로 아래와 같을 떄 select 대상에 shared Lock 발생
Gap Lock
2. Exclusive Lock
배타잠금이라 하며 대표적으로 아래와 같을 때 Exclusive Lock이 발생
Record? Index?
단일 Record 락
단일 Record가 아닌 Index
단일 Record가 아니며 Index도 아닐경우
최장훈, 하반기 채용에 깨진 멘탈 다시 붙인 썰
하반기 채용 도전기
1. 서류는 늘 합격하는 멋쟁이인 나
-> 현실은 서류도 합격하지 못하는 나
2. 집중할 수 있는 단기적 목표
- 백기선님 온라인 스터디 참여
스터디에 참여하며 생긴 변화
1. 효율적인 일정관리에 도전하는 계기가 되다.
2. 가독성이 높게 정보를 정리하고 기록하는 습관에 도전하다.
바쁜 와중에도 시간내서 고퀄리티 글을 쓰는 분들이 많음
나도 꼭 그렇게 해야 될까?
-> 그래도 도전하는 이유, 정보를 이해하고 가공하는 것은 피할 수 없다.
3. 코딩습관 개선에 도전하다.
- 50분 코딩 10분 생각
좋은점
1. 전체적인 흐름파악이 쉬워짐
2. 발생가능한 예외사항 예측
3. 실수 감수 = 코딩 스트레스 감소
박재성, 어디 가서 코틀린 알은체하기
코틀린이란?
JVM, Android javasciprt 및 Native를 대상으로 하는 정적 타입 지정 언어
jetbrain에서 개발한 오픈 소스
객체 지향 함수형 스타일 모두에서 사용하거나 두 요소를 혼합해서 사용
정적 타입 지정 언어란?
모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증해 준다는 뜻(타입 추론)
코틀린은 세미콜론도 없다.
var x : Int =1
var x = 1
스프링 5.2부터 참조 문서에 자바 외에 코틀린 코드 샘플 제공
멀티 플랫폼을 지원하는 언어
코틀린/JVM
코틀린 컴파일
내부적으로 애플리케이션이 실행 되기 시작하면 코틀린 컴파일러는 모든 코틀린 파일을 JVM이 이해할 수 있는 자바 바이트 코드로 변환
.kt -> kotlin compiler -> .class -> .jar -> + kotlin runtime => Application
코틀린은 롬복을 사용할 수 없다.
모든 것이 객체
코틀린에서는 모든 것이 객체이다.
일부 유형은 특수 내부 표현을 가질 수 있다. 예를 들어 숫자, 문자 및 부울은 런타임에 기본 값으로 표시 될 수 있지만 사용자에게는 일반 클래스처럼 보인다.
코틀릿 맛보기
자바는 메인 메소드를 실행해야된다.
코틀린은 함수를 최상위 수준에 정의 할 수 있다. Java와 달리 꼭 클래스 안에 함수를 넣어야 할 필요가 없다.
- 코틀린에서는 메소드가 아닌 함수라고 부른다.
fun main() {
println("Hello world")
}
변수 선언
코틀린은 두 키워드(val 및 var)를 사용하여 변수를 선언합니다.
- 값이 변경되지 않는 변수에 val을 사용합니다. val을 사용하여 선언된 변수에 값을 다시 할당할 수 없습니다.
- 값이 변경될 수 있는 변수에 var을 사용합니다.
블록이 본문인 함수
....
식이 본문인 함수
....
스마트 캐스트
- 코틀린에서는 프로그래머 대신 컴파일러가 캐스팅을 해 준다.
- 어떤 변수가 원하는 타입인지 검사하고 나면 굳이 변수를 원하는 타입으로 캐스팅하지 않아도 마치 처음 부터 그변수가 원하는 타입으로 선언된 것처럼 사용할 수 있다.
- 실제로는 컴파일러가 캐스팅을 수행해 주며 이를 스마트 캐스트라고 부른다.
이름 붙인 인자
아래의 인자로 전달한 각 문자열이 어떤 역할을 하는지 구분할 수 있는가?
Person("최향근. 28, "hk");
코틀린은 이름을 붙일 수 있다.
널타입
타입 뒤에 ?를 붙이면 nullable
유틸리티 클래스
코틀린은 클래스를 따로 만들 필요가 없다.
require()와 check
require()는 값을 만족하지 않으면 IllegalArgumentException을 발생시키고 check()는 값을 만족하지 않으면IllegalStateException을 발생시킨다.
좋은 개발코드의 8가지 특징
- 잘 작동한다.
- 일기 쉽다
- 테스트 가능하다
- 관리가 쉽다
- 외관이 보기 좋다
- 변경이 쉽다
- 간결하다
- 효율이 좋다. - 제대로 못봄
API가 깔끔하다
- 읽기쉽다
- 외관이 보기 좋다
- 간결하다
코틀린은 간결한 구문을 어떻게 지원하는가
- 확장 함수 : 마치 원래 있던 함수처럼 사용
- 중위 표기
- 연산자 오버로딩(Operator Overloading)
- get 메서드에 관한 관례
- 람다를 괄호 밖으로 빼내는 관례
- 수신 객체 지정 람다
마무리
자바-코틀린 변환기
인텔리제이의 자바-코틀린 변환기를 이용한다.
code -> convert java File to Kotlin File
물론 완벽한 코드는 아니지만 동작하는 코드는 만들어 준다.!
코틀린 역컴파일
인텔리제이 역컴파일 기능을 이용한다.
1. menu -> Tools -> Kotlin -> show kotlin bytecode
2. Decompile
'세미나' 카테고리의 다른 글
[2월 우아한테크세미나] 우아한 스프링 부트 (0) | 2021.04.04 |
---|---|
[OKKYCON: 2018] 정진욱 - 테스트하기 쉬운 코드로 개발하기 (0) | 2021.03.27 |
[자바 라이브 스터디] 종료 기념 리뷰 (0) | 2021.03.21 |
[OKKYCON 2021 Live] 협업의 기술 (0) | 2021.03.06 |
IntelliJ 사용법 및 단축키 정리 (0) | 2020.08.09 |