11월, 2020의 게시물 표시
이미지
3주차 과제: 연산자 목표 자바가 제공하는 다양한 연산자를 학습하세요.
한 주가 시작한 23일이다.  그간 회사일을 하면서 백기선님이 내준 스터디를 병행하고 있는데 변수나 연산자같은 기초적인 부분임에도 내가 간과하고 넘어간 부분을 짚을 수 있고, 헷갈렸던 개념을 정리할 수도 있어서 너무 좋다. 보통 개념 부분은 누군가가 질문하면 아 그거 분명 썼는데 ... 라는 생각이 나는반면 이걸 하고 나면 이런 일이 줄어들것 같은 생각. 열심히 18주 100% 채워서 올릴 예정이다.  저번주에는 API 테스트를 처음 해봤다. POST MAN을 단지 스스로만 돌아가는지 확인하는거면 그냥 sysout 찍는거랑 뭐가 다른가 싶었는데, 중요한점은 서버를 구동시킨 상태에서 이 API가 통신을 지나오면서도 내가 원하는 일을 수행하느냐가 관건이었다. 해서 권한이 설정된 일이라면 권한을 가진 token도 미리 입력해줘야 하고 다른 여러 조건을 설정 해줘서 실제 돌아가는 환경에서 테스트를 한다는것 이게 중요한 점이었다. mapper에서 오타가 아닌 조인을 적용하는 수정을 했는데 간만에 써서 그런지 이런 저런 오류를 많이 만나게 되었다. 어떤 부분에서 테이블을 명시해 줘야 하는지 어디에서는 생략하고 쓸 수 있는지 생각하면서 수정하는 좋은 경험 이었다. exel 다운로드를 보면서 코드가 깔끔하다 생각이 들었는데, 지금 문자메세지 관련 템플릿은 봐도봐도 모르겠다. 내일 이걸 본격적으로 수정할 계획인데 부디 내일 하루동안 잘 진행됐으면 ... Arrays.asList 클래스를 처음 써본것 같다. Arrays.list 와는 다른 클래스로 고정된 크기의 list를 반환하고 간단하게 배열에 요소들을 추가할 수 있다. 이런걸 쓰니까 내가 아는 지식이었다면 3~4줄은 써야 가능할 배열에 요소 추가가 단 한줄로 되는 걸 보고 코드를 잘 구성하고 싶어졌다.  이클립스의 quick fix 기능을 사용하면 if-else문과 switch문을 쉽게 변환할 수 있다. intelij에서 지원한다고 해서 신기해 하고 찾아봤는데 이클립스도 지원하는 것. 설정에 한세월 걸리면서 버그도 자주 걸
이미지
  2주차 과제: 자바 데이터 타입, 변수 그리고 배열 목표
1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. 1. JVM이란 무엇인가 Java Virtual Machine 으로 시스템 메모리를 관리하고 Java 기반 애플리케이션을 위한 실행환경을 제공 하는 머신(프로그램)  기능은 대표적으로 두가지가 있다. 첫번째는 자바를 모든 기계 또는 모든 운영체제에서 작동 가능하게 하는것과  프로그램 메모리를 최적화 및 관리 해주는 역할이다.  기술적 정의로는 "JVM은 코드를 실행하고 그 코드에 대한 런타임 환경을 제공하는 소프트웨어 프로그램의 규격" 일상적 정의로는 "JVM은 자바를 실행하기 위한 방법" 정도라고 볼 수 있다.. 가비지 콜렉터라는 프로세스가 사용되지 않는 메모리를 지속적으로 식별하고 제거해 주는 역할을 해서 메모리를 최적화 해준다.  2. 컴파일 하는 방법 javac 라는 JDK 에 포함된 자바컴파일러를 통해서 컴파일 합니다.  이때 컴파일 하려는 대상(소스)에 대한 정보를 알고 있어야 함으로 -sourcepath 옵션으로  관련 소스 파일의 위치를 지정 해줄 수 있다.  컴파일을 통해 생성된 실행 파일은 .class 즉 클래스 파일이 되는데 이때 클래스 파일의 위치를 지정하는 것이 -classpath 옵션이다. 2-1. javac 옵션 조사 javac 명령어는  javac <options> <source files>  이렇게 실행 할 수 있는데 이때 option의 종류는 아래와 같다.  -classpath classpath(cp) path (파일 절대 경로) : 컴파일러가 참조할 클래스 파일들을 찾기 위해서 컴파일 시 파일 경로를 지정합니다. -sourcepath  sourcepath path (소스 경로) : 소스파일의 위치를 지정합니다. -target  target 자바버전 : 지정된 자바버전의 VM에서 작동 되어지도록 클래스 파일을 생성합니다. ex) javac -target 1.8 Hello.java  -bootclasspa
자바를 단지 도구로만 생각하고 이를 더 잘 쓰는걸 jsp, spring 이라고 생각했는데 오히려 자바에 대해서 알아야 하는게 더 깊고 깊다는걸 배웠다. spring의 근간이 되는 기술인 만큼 다른 기술들에도 적용할 수 있고 java는 내 생각보다 더 엄청난 언어임이 틀림없다. jsp 단에서 "data-id" 라는 태그가 쓰였는데 html5 부터 지원하는 태그라고 한다. 뭐인지 찾아 보곤 하니 그간 name이나 id 처럼 해당하는 속성 전체를 불러와서 그것의 value를 검색하는 방법과 달리 <data-id="title">의 경우 data라는 큰틀에서 key값이 id, value값이 title이 되는 식이었다. 해서 구글링으로 아무리 data-id를 통한 전체 속성에 value 접근을 찾아봐도 나오지 않는 것 우리 소스를 보면 구현해놓은게 있긴 하지만 이는 name, id, class를 하나하나 찾아봐서 해당 값을 가져오는 방식이었다. 조금 시간이 오래 걸리기는 하지만 구현이 가능하다는 것만 알아두고 나는 다른 방식을 사용하기로 결정  spring 의 세가지 요소  IOC 컨테이너, AOP, 추상화 계층  이를 제대로는 모르지만 이렇게라도 알아두는게 좋을것 같아서 일단 적어두고  새로운 단어를 배웠다. 바로 'Yak shaving' 이는 어떤 행위를 위해서 계속 계속 다른 일을 하다가 결국 밑바닥 부터 하게 되는것을 의미한다고 한다. 이에 대해서는 여러 예시가 있지만 간단히 보자면 시험공부를 시작 하다가 결국 방청소를 하게되는 그런것이 개발에도 그대로 있고 이를 나타내는 단어까지 있다니. (하지만 공감갔던 글 yak shaving은 재밌다.) 객체 지향의 4요소는  추상화 (클래스/객체) - 모델링  캡슐화 - 정보은닉 상속 - 재사용/ 확장 다형성 - 사용편의  아무리 듣고 들어도 낯설고 어렵다. 내가 이를 지키지 않고 객체지향 언어를 사용하고 있기 때문 어서 해당 요소를 적용하며 개발 하는 개발자가
MyBatis 문법에 새로운게 있다. <![CDATA[ ]]> 여기서 [ ] 안에 있는 데이터들은 쓴 그대로 DB로 전송된다. 즉 부등호를 사용할 때 쓰는것 전체를 감싸도 되고 부등호만 따로 감싸도 작동한다.  #과 $ 의 차이  생각해보니 학원에서는 주로 $를 썼다. #을 이곳은 아니지만 다른곳에 종종 쓰곤 해서 코드를 보면서 어색한걸 못느꼈는데 차이점을 알아둬야 하는것 같았다.  #은 Prepared statement $는 statement로 #은 ?형태로 쿼리가 전달된다. 직접적인 차이점을 보자면 ''로 자동으로 감싸주는것, ?로 전달되기 때문에 보안이 좋은것 등등 있어서 일반적으로는 #을 더 많이 사용하는듯 하다. 테이블이나 컬럼명을 파라메터로 전달해야 할 때는 ''로 감싸지 않는 $를 쓰니 둘다 알아두고 적재적소에 사용하는게 좋다. MYSQL에 있는 CONCAT도 사용하는데 이건 하나 이상의 문자열 혹은 컬럼 값을 합쳐서 사용 할때 쓴다. 우리 코드에서는 LIKE % 를 사용하려고 썼었다. 이때 하나라도 null값이 들어가면 전체출력이 null이 되는데 이와 비슷한게 CONCAT_WS가 있다. 이건 첫번째 인자는 구분값으로 들어가고 중간에 null이 있더라도 해당 부분만 무시하고 출력이 가능하다. 그래도 일반적인 CONCAT을 더 많이 사용 하는듯  전에 살짝 언급했던 enum이 내 생각보다 더 심오하고 사용성이 많은? 기능 이었다. 선배님이 왜쓰는지에 대해서 꼭 알아두라고 하셨기 때문에 여러 포스팅을 보면서 정리하자면  enum은      상수의 집합으로 defalut 생성자가 private이다.     문맥을 담는다.      데이터간 연관 관계를 표현하고      상태와 행위를 한곳에서 관리 한다.     데이터의 그룹관리가 가능해지고      관리의 주체를 DB에서 객체로 이동하게끔 한다.     위 내용과 더불어 써야하는 이유로는 IDE의 강력한 지원이 있다고 한다. (자동완성, 오타검증, 텍스트 리팩토
주말과 월요일을 지나서 화요일  금요일 오후부터 코드를 살펴보기 시작하면서 이클립스와 씨름하고 있다. 먼저 찾아본건 VO패턴 종류는 총 세가지로 점층적 생성자 패턴, 자바 빈 패턴, 빌더 패턴 등이 있는데 내가 그동안 만들었던 빈객체를 만들고 setter로 채워나가는 패턴은 두번째 패턴인 자바 빈 패턴에 해당한다.  요즘에는 빌더패턴이 대표적이래서 알아봤는데, 이건 한번 만들고 나서는 수정이 불가능하기 때문에 자바빈 패턴과 함께 수정여부를 판단해서 혼용 사용해야 한다. enum이라는 파일 형식에 대해서도 처음알게되어 찾아봤다. class와 같이 선언해서 쓰는 "열거" 형 클래스라고 봐도 되는데 이때 각자 원래 선언돼 있던 함수를 사용해도 되지만,  Y(1, true)  N(0, false)  이런식으로 묶어서 이것이 같은것임을 나타내주는걸로도 사용된다.  pathVariable 이라는 어노테이션은 한가지의 메서드로 여러페이지로 페이징이 가능하게끔 해주는 것이었다. 이걸로 웹/모바일 구분도 하는것 같았다.  그리고 나는 서버개발자로서 회사에 일하고 있다. 즉 서버를 다뤄야 하고 서버를 다루려면 리눅스를 만질 수 있어야 한다는 것. 사수선배님 말대로 능숙해지면 다룰 수 있는 기술 스택은 늘어나겠구나 싶었다.  중요도      1. API 생성/사용                2. 백엔드 관리               3. 리눅스/ DOCKER 서버 배포                4. DB 관리               5. 프론트엔드 수정  WSL - Window Subsystem for Linux  윈도우에서 리눅스 터널을 거의 비슷하게 돌릴 수 있으나 최신버전의 윈도우가 필요하고  설치시간이 꽤걸리나 보다. 노트북으로 연습하려면 집에 있는 노트북보다 더 좋아야 하지 않을까 싶다.  이틀 넘게 씨름하면서 이제야 조금 웹페이지가 켜지는데 뭐이리 문제될만한게 많은가 싶다. 1. utf-8로 설정해야 하는게 훨씬더 많았다. enco 라고 쳤을때 나
불과 어제 배웠던 REST API가 실무에서는 엄청나게 다르게 쓰이는 걸 배웠다.  과장해서 말하자면 실제로 지키는 곳은 구글 아마존 뭐 이런 초거대 기업 정도라는거 ?  그와 관련해서 새로이 배운 단어는 '페이로드' 와 '멱등성' 특히 멱등성은 단어가 주는 느낌부터 어려운데 한번 실행 했을때 결과와 여러번 실행 했을때 결과가 같아야 한다.  조회 같은 경우 아무리 많이 조회해도 데이터 자체에는 변화가 없으니 멱등성이 유지되는 반면 "1명을 추가해라" 같은 명령은 매번 실행때마다 전체 인원 수가 바뀌기 때문에 멱등성이 유지되지 않는다.  이제 '페이로드'는 실제 전송되는 데이터를 의미한다. JSON의 경우 목적지에서 해석을 위해 여러가지 헤더나 정보들이 들어가는데 이때 전송하기 위한 제일 중요한 데이터가 바로 페이로드이다 택배에서 내용물에 해당한다는 비유가 아주 찰떡  docker에 관해서는 어제 오후에 공부했는데 리눅스 특히 서버측에서 자주 쓰이는 기술이었다. 전체 가상화가 아닌 부분가상화 기술로 서버 관리, 개설등을 획기적으로 간단하게 만들어준  기술. 등장한지 10년도 안됐지만 엄청난 대우를 받는 것이 분명했다.  lombok 또한 어제 겉핥기로 봤던 것보다 더 여러가지 기능이 있는 프레임워크였다. 하지만 코드를 직접 본결과 왜 이때는 쓰고 이때는 안 쓰는지 아직은 모르겠다. 주의점을 잘 알고 써야 한다고 한다. CI/CD 지속적통합/지속적배포 이건 개발부터 배포 이후 유지까지 지속적이고 발전적인 개발을 의미하는데 이건 꾸준해야 하고 그러기 위해선 자동화가 필요하다 이때 필요한 툴이 젠킨스를 비롯한 자동화 CI툴  깃에 올라와 있는 우리 소스를 살펴봤다. 보면서 느낀점을 나열하자면  adminVO 에서 롬복으로 만든건 기본 생성자?? AllArgsConstructor 과 직접 만든 생성자의 차이 (사수님께 물어봐야한다.) 순서는 내가 했던 파이널 프로젝트와 매우 흡사 했다.  다오에서 정의하고
살면서 가장 실무에 가깝게 정보들을 접하고 나니 취미나 학원에서 배웠던 개발에 관련된 지식보다 엄청나게 많은 진입장벽이 있는게  코디이었다.  개발 툴의 목적이나 방법들의 진화는 대체로 한 방향으로 흐르는 것 같다. 초기 설정은 복잡하게 방법은 심플 하게 조각은 최대로 나누고 나누어서 why? 프로젝트의 전체 크기가 날로 커지고 커지니까 "나중"에 쉽게 하려고  즉 "유지, 보수"를 위해서 개발할 때 잠깐 더 아프고 말자 라는 쪽으로 발전하는 느낌이다.  느낌을 떠나서 새로이 알게 된 것들은 STS (이클립스에 스프링 플러그인을 추가로 깔아서 써봤지만 이대로 나와있는건 처음 써봤다.) spring boot (spring 발전형같은 건데 가장 큰 특징은 tomcat이 내장돼 있는 것) bitbucket (GITHUB와 비슷한 건데 아직 수월하게 쓰는 방법을 모르겠다.) 소스트리 (bitkucket을 만든 곳에서 만든 것으로 형상관리 프로그램) monolithic vs MSA (아키텍처로 프로젝트를 분리해서 만든다는게 충격) JWT (json도 아직 익숙하지는 않은데 이상태로 보통 로그인 정보등을 교환한다.) 개발과 관련 없지만  puddlr (회사 메세지로 쓰고 있다.) 플로우 (예전에 한번 써본적 있는데 이것도 회사 업무 관리로 사용중이다.) 이외에도 spring roo, spring webFlux, 롬복이나 넥플릭스가 oss 를 배포 한다는것 등등 이렇게가 첫째 날 알고 배운 것이다.  둘째 날인 지금  REST (API) 에 대해서 영상과 문서들로 공부 했다. 간단히 말해서 웹에서 클라이언트가 서비스 중임에도 변화없이 서버측을 바꾸고, 또는 반대에 상황을 위해 고안된 것인데, 이게 어떻게 쓰이는지 특징이 무엇인지, 현재 이것의 이름을 달고 있지만 지켜지지 않는 점이 무엇인지 등에 대해 들었다. 아주 흥미로운 강의였던 "그런 REST Api로 괜찮은가?"  하지만 현재 내가 api를 만드는 입장이 아닌 사