전체 글

추운 겨울이 다가와 힘겨울지도 몰라 봄바람이 불어오면 이젠 나의 꿈을 찾아 날아
더티체킹이란 "상태변경검사"라고 생각을 하면 쉽다 public void update(Long id, String status) { User user = userRepository.findById(id).orElse....; user.setStatus(status); userRepository.save(user); } User의 아이디로 데이터를 불러온 뒤 수정한다음, 수정한 User객체를 save메서드로 저장하였다. save()메서드는 새로운 데이터를 만들어서 저장할 때 쓰이기도 하지만, 위와 같은 상황에서 쓴다면 update쿼리가 수행된다. JPA에서는 트랜잭션이 끝나는 시점에 변화가 있는 모든 엔티티 객체를 데이터베이스에 자동으로 반영해준다. 변화의 기준은 최초 조회 상태 이다. JPA에서 엔티티를 ..
JPA란 JPA(Java Persistence API)는 Java 객체와 관계형 데이터베이스 간의 매핑을 위한 API이다. ORM(Object-Relational Mapping)을 구현하는 자바 표준 스펙으로, 개발자가 객체지향 프로그래밍 언어에서 사용하는 개체 모델과 관계형 데이터베이스의 테이블 간의 매핑을 자동으로 처리해 준다. 구현체로는 Hibernate, EclipseLink, Data Nucleus가 있으며 Hibernate가 가장 대중적이다. JPA의 사용 이유 1. 생산성이 증가한다. DDL문 자동 생성 간단한 메서드로 CRUD가 가능해진다. SQL을 작성하고 JDBC API를 사용하는 반복적인 일을 대신 처리한다. 2. 유지보수가 쉽다. 기존 : 필드 변경시 모든 SQL 수정 JPA : 필..
오버로딩(Overloading) 두 메서드가 같은 이름을 가지나 인자의 수나 자료형이 다른 경우를 말한다. public int plus(MyNumber a) { ... } public int plus(MyNumber a, MyNumber b) { ... } public int plus(YourNumber a) { ... } 대표적인 오버로딩 메서드 장점 1. 같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다. "System.out.println()" 인자값으로 int, double, boolean, String 등 다양한 타입의 매개변수를 넣어도 콘솔창에 문제없이 출력해준다. 2. 메소드의 이름을 절약할 수 있다. println()을 각 타입별로 이름을 다르게 정해주지 않고 하나의 이름으로 한번..
Call by Reference (CBR) 함수가 인수를 전달할 때 사용되는 방식에는 Call By Value(CBV), Call By Reference(CBR)가 있다. CBV는 함수가 인수로 전달받은 값을 복사하여 처리 하기 때문에 원본 값은 변경되지 않는 특징이 있다. CBR는 인수로 전달되는 변수의 참조 값을 함수 내부로 전달하는 방식이기 때문에 전달된 변수의 값을 변경하면 호출한 쪽의 변수의 값도 변경되는 특징이 있다. CBR의 장점으로는 : 복사하지 않고 직접 참조를 하기 때문에 상당히 빠르다. 반대로 단점은 : 직접 참조를 하기에 원래의 값이 영향을 받는다.(리스크가 존재) 하지만 Java는 객체지향 프로그래밍이기 때문에 Call By Value를 지향하고 있으며 그러한 방식으로 동작한다. ..
개요 모노리스 서비스에서 적용된 jwt 인증을 마이크로 서비스에서 jwt 인증을 할 수 있도록 구현하기 user와 관련된 내용이지만 게시글 작성, 댓글 작성 등 인가가 필요한 활동을 할 때마다 user-service를 거치지 않을 것 인증/인가가 필요하지 않은 서비스와 필요한 서비스를 구별 접근방법 모든 요청을 가장 먼저 받아서 처리하는 api-gateway에서 인증/인가를 구현 AbstractGatewayFilterFactory를 상속받는 filter를 사용 인증/인가가 필요한 서비스와 필요하지 않는 서비스를 나누어서 두 개의 filter를 각각 적용 해결과정 인증/인가가 필요하지 않는 서비스에는 NoTokenRequiredFilter를 적용 (회원가입, 로그인, 이메일 인증, feign-client..
개요 jwt 토큰방식의 인증/인가를 도입 토큰 하나로 모든 서비스를 처리하게 된다면 해당 토큰을 탈취당하는 보안 이슈 발생 우려 jwt 토큰방식의 보안성 강화 접근방법 토큰에 클라이언트의 ip주소를 담고 검증과정에서 ip주소가 다를 경우 에러를 반환 RefreshToken 사용 ip주소가 담긴 토큰이 탈취된다면 더 심각한 보안 이슈가 발생될 가능성이 있으므로 많이 쓰이는 RefreshToken을 사용 또한, 모바일의 경우 ip 주소의 변경이 자주 일어날 수 있으므로 그때마다 에러를 반환하게 된다면 유저가 불편함을 겪기 때문에 ip 주소를 담지 않기로 함 또한 RefreshToken도 유저에게 발급하고 관리하게 된다면 마찬가지로 탈취될 가능성이 있다고 우려되어, RefreshToken은 유저에게 제공하지 ..
개요 회원가입의 마지막 단계에는 이메일 인증을 완료해야 한다. 이메일 인증 도입 이유 이메일을 회원의 아이디로 사용하기 때문에 고유한 값이 필요(Unique Key) 이미 타 사이트에서 인증이 된 이메일을 사용함으로써 고유성을 확보 하지만 이메일 인증의 방식에는 두가지가 존재 일반적으로 내가 경험한 사이트들은 회원가입시 이메일로 인증 코드를 발송하고, 인증 코드를 사이트에 입력하여 일치여부를 확인한 뒤 가입을 완료시킨다. 위와 같은 인증 코드를 입력시키는 일반적인 방법 외에 인증 링크를 클릭해서 인증을 완료하는 방법도 존재하였기에 이 두가지 방식 중에 어떤 방식을 적용 시킬지 고민을 하였다. 링크 vs 입력 인증링크를 클릭하는 방식을 선택 가입 시 입력한 이메일에 쿼리 파라미터로 이메일과 인증코드가 담긴..
사실 몇달도 아니고 거의 일년이다 그동안에 나는 많은걸 한것 같지만 한게 없는것도 같다. 일단 3월에 국비를 시작해서 자바란 녀석과 좀 친해진거 같은데... 어느새 또 멀어지고 있어서 지금 다시 친해지려고 노력중이다. 9월에 국비가 끝나고 취업을 하기 위해 여기저기 이곳저곳 열심히 이력서를 넣고 지원하였지만... 단 한군데도 서류합격을 하지 못하였다. 그래서 이력서도 여러번 갈아 엎기도 하고, 멘토링도 받아보았다.(물론 결과가 달라지진 않았지만..) 그리고 올해 1월부터는 개발자 취업 과정에 들어가서 다시한번 공부하며 나의 취업을 위해 또다시노력하고 있다. 지금은 어느새 이것또한 끝나가는 시기가 되었고, 이 과정을 들으면서 진행했던 나만의 프로젝트, 나만의 스킬들을 다시 이력서로 작성하고 다시 지원하는 ..
자바 문법 배우는 중이어서 그래도 쉽게 잘 해나가고 있다. 몇군데의 학원 면접에서 다 떨어지고 다니는 학원이라 뭔가 오기로 더 열심히 하게 되는 것 같다. 진짜 어떻게든 내가 성공해서 후기 잘 쓰고 다녀야지 하는 맘으로... 필기했던 메모를 공유하고 싶은데 강의 내용을 어디서부터 어디까지 올려도 되는지 사실 잘 모르겠어서 올리기가 두렵다. 일단은 보류.. 강사님께서 기초 문법을 하나하나 이해하기 쉽게 너무 잘 설명해주셔서 너무 흡족하다. 물론 나는 미리 선행을 하고 나서 듣는거긴 한데, 모르고 왔어도 잘 이해가 될 것 같았다. 근데 나는 이해력이 좀 부족한 사람이어서 책으로 한번 유튜브로 한번 하고 나서 강사님께 배워야 비로소 이해가 다 되는 것 같다ㅎㅎㅎ 오늘 생성자까지 배웠다. 클래스, 메서드, 필드..
중앙hta에서 국비를 신청하고 오늘 첫 수업을 하였다. 유명하신 강사님이라고 hrd-net 강사평가도 4.9점에다가 okky 커뮤니티에서 강사님 좋으시다는 얘기도 많아서 설레는 마음으로 첫 수업을 갔었다. 일단 수업 내용은 자바의 역사, 자바의 성격, 자바 설치, 이클립스 설치 였다. 첫 날이라 그런지 어려운 내용은 없었고, 다행히 선행학습을 한 덕에 모르는 부분도 없었다. 그리고 가장 중요한 강사님의 강의 내용은 정말 좋았다. 어려운 부분은 다시 짚어주시면서 모두가 따라올 수 있게 설명해주셨고, 비유도 잘 들어주셔서, 객체 지향에 대해서 완전히 이해를 할 수 있었다. 그림판으로 그려서 설명해주시는데, 너무 이해가 잘 되었다. 끝까지 강사님과 같이 마무리 지어보고싶었다. 이 수업은 3월까지는 비대면, 대..
abstract만 잘 기억해 놓을 것!! 이클립스에서 알아서 오류가 뜬다고 설명을 해준다. 물론 그것만 믿고 이해하지 않고 있으면 안 되겠지만, 그래도 그렇게라도 도움이 되서 다행인 부분. abstract 적고 메서드에 중괄호를 빼고 ;를 적으면 추상 메서드가 완성되고, 그것은 나중에 상속된 클래스를 적을때 꼭 안에 내용을 채워줘야 오류가 나지 않는다. 추상 클래스 관련 내용은 이게 다였다. 아주 이해하기 쉬웠다. final에 대해서도 같이 나왔는데, 이건 javascript에서 const와 비슷하다고 생각하면 될 것같다. 절대 변하지 않는 상수!!
배열 초기화의 방법이 참 많다. int[] numlist = new int[] {1, 2, 3, 4, 5}; int[] numlist = new int[5]; int[] numlist = {1, 2, 3, 4, 5}; int[] numlist = new int[5] {1, 2, 3, 4, 5}; // 오류 발생!!!! 앞에 자료형도 넣어줘야하고, 대괄호도 필요하고 중괄호도 필요하고... 그리고 가장 중요한 것은 객체 배열이 아닌가 싶다. 클래스 생성자로 객체 배열을 생성하고, 그 안에다 또 인스턴스를 생성해서 넣어야 하는 것이 어려웠다. 처음에는 대체 뭔말인가 싶었지만, 그래도 지금 4번째 보니까 이제야 조금은 알것 같다(복습의 중요성...) ArrayList는 import를 해주고 나서 쓸 수 있는데,..
어떤 한 학생이 버스를 탈때, 지하철을 탈 때에 각각의 이벤트가 다르다는 점을 코드로 구현하는 것이 참 흥미로웠다. 뒤에 연습문제로는 사람이 별다방에서 아메리카노 먹는 것, 콩다방에서 라떼를 먹는 것을 프로그래밍 하는 것이었는데, 그것을 프로그래밍 하기 위해서 전체적인 큰 그림을 잘 그려놓고 코드를 작성해야 됬다. 먼저 무언가를 마시는 사람 클래스(Person)을 만들어서 그 안에 이름과, 소지하고 있는 돈을 멤버 변수로 할당하고, 어떤 카페에서 어떤 음료를 마시는 행동을 메서드로 작성해야 한다. 그리고 각 카페클래스(Star, Bean)마다 마실 때 어떤 음료를 마셨는지에 대한 메서드를 작성하고, 메뉴 클래스(Menu)에다가는 각 카페의 음료 가격을 메서드로 구현해야한다. 이렇게 4개의 클래스를 연결해..
생활코딩님의 Java입문강의를 통해 클래스의 내용을 한번 훑었어서 이해하는데 쉬웠다. 변수의 자료형은 기본 자료형(int, long, float, double 등)과 참조 자료형(String, Date, Student 등)으로 나뉜다. 소문자와 대문자로 기억하면 조금은 쉬울 것 같다. 매서드의 return 값이 있다면 그 값에 알맞는 자료형을 메서드 앞에 써줘야 한다. 만약 반환값이 없다면 void 클래스를 통해 인스턴스를 만들고 싶으면 new 예약어를 통해 만들기. 생성자는 그 클래스의 이름으로 자동 생성된다. 따로 생성자를 만들었을 경우에는 디폴트 생성자를 추가해줘야 한다. private으로 변수를 선언하면 그 변수를 바꿀때에는 get(), set() 메서드를 통해 바꿔야 한다. 보통 private를..
이전에 학원에서 프론트엔드과정 수업으로 만들었던 것이다. 구글에서 크리스마스에 나온 '산타추적기' 앱에 있었던 '엘프 즉석 밴드'를 보고 아이디어를 떠올렸는데, 다 만들고 나니까 몇가지 문제가 있었다. 처음에 만들었던 방식은 1. mousedown하면 각 악기들이 볼륨이 0으로 동시에 재생이 됨 2. 원하는 악기를 무대박스에 올려놓으면 해당 악기의 볼륨이 1이 됨. 3. 악기가 무대박스를 벗어나면 처음 위치로 돌아가서 다시 볼륨이 0으로 됨 여기서 나타나는 문제점은... 1. 왜인지 악기들의 싱크가 맞질 않는다. 2. 각 악기들의 처음위치인 offset().left 혹은 offset().top이 계속 오류가 난다. 제자리로 돌아오는 값을 찾지 못함 이것들을 해결하지 못해서 선생님께 여쭤 본 결과 직접적인..
개발의 WinG
나는 나는 자라서 멋진 개발자가 될거야