분류 전체보기
-
톰캣(WAS)과 스프링 그리고 스프링부트 , 무슨 관계지?Spring & JPA 2023. 10. 16. 04:22
스프링을 초반부분을 공부중이다. 스프링의 MVC 패턴에서 배우는 핸들러나 디스패처 서블릿이 왜필요한지 정도를 공부한적도 있고, 웹 서버와 웹 애플리케이션 서버의 차이에 대해 공부한적도 있는데 스프링과 톰캣WAS)의 관계를 공부한적이 없다. 그냥 막연히 스프링부트가 톰캣 띄워주는 정도로 이해하고있었다. 어느 강의에서 '옛날엔 톰캣 설정하다 시간 다갔다' 라는 말만 들어봤고 정확히는 몰라서 정리해보려한다. 웹 서버와 웹 애플리케이션 서버의 차이를 모르신다면.. 해당글을 읽어보시는것을 추천드립니다. 톰캣은 정적 처리를 돕는 웹 서버의 기능과 Sevlet Container가 합쳐진 WAS라고 이해하면 된다. 결국엔 웹서버만으로는 동적처리가 안되니까 무언가 추가를 하는것인디... 바로 서블릿이 해주는것이다. 정확..
-
2023 여름부터 9월까지회고록/개발 인생 2023. 10. 12. 00:50
6월 나름의 전공생? 이었지만 막학기를 앞두고 백엔드 개발자로서 무언가 제대로 한게 없어서 비상사태였다. 우선 뭐라도 해야겠다 싶어서 싸피에 지원했다. 근데 면접에서 탈락했다 ㅋㅋ 이제야 웃으면서 말할수 있다,, 이전의 내 성격이라하면 해봄직한것들만 시도하는 사람이어서 시험같은걸 실패한 경험이 거의 없었다. 그래서 되게 쓰라렸다. 당연히 될줄알았는데 (지금생각해보면 떨어질만 했다) 자존감이 좀 많이 떨어진 상황에서 공부를 어떻게해야하나 막막했다. 평소에 안읽던 책까지 읽어보면서, 당장 공부를 시작하기보다 나를 조금 되돌아보는 시간을 가졌다. 내가 어떤 사람이 되고싶은지? 그렇다면 어떻게 노력해야할지 ? 내가 뭐가 부족한지? 평상시에 이러한 생각들에 잠긴 채 살다보니 인생의 갈피가 조금이나마 잡히기 시작했..
-
Auto Increment 에 대한 생각해보기생각해보기 2023. 10. 6. 09:18
그동안 MYSQL에서 InnoDB와 MyISAM 두 스토리지를 선택해서 사용했는데, 8.0 이후로는 InnoDB 기반으로 다 넘어갔다고 한다. 따라서 해당 글은 InnoDB 스토리지 기반의 MYSQL 기준으로 작성했다.(MYSQL 8.0 이후) 이전버전에는 MyIsam 스토리지도 사용해서, 조금 다른 결과가 나올수 있다. Auto Increment는 보통은 id값에 pk와 함께 많이들 거는 제약조건이다. 사용자에게 받기보다는 DB에게 알아서 중복되지 않도록 값을 증가시키려한다. 이렇게만 보면 문제 생길 것이 없는데, 그럼에도 생각해볼거리가 있다!! 데이터를 삭제 하고 난 뒤에 데이터를 추가하면 Auto-increment가 걸린 필드값에 공백이 생기는데 안생기게 할 수는 없나? 해당 테이블은 10개의 데이..
-
람다3편) stream + Optional 기능(feat. orElse VS orElseGet)Java 2023. 9. 22. 13:36
Optional의 문법적 개념과 어떤 상황에 써야하는지 배웠지만 잘 감이 오지 않았다. 그러다가 stream에서 자주 사용되는것을 보고 감을 잡기 시작했다. stream을 사용할때 반환값으로 Optional을 갖는 메서드들이 있다. findAny(), findFirst()... 우선 Optional에대해 공부하자. - Optional 객체를 생성하는 static함수 3가지 - empty() Optional은 Wrapper 클래스이기 때문에 값이 없을 수도 있는데, 이때는 Optional.empty()로 생성할 수 있다. public static Optional empty() { @SuppressWarnings("unchecked") Optional t = (Optional) EMPTY; return t;..
-
람다 2편)람다의 활용, stream APIJava 2023. 9. 22. 11:10
지난글에서 함수형 인터페이스들을 통해 람다식이 실행될 수 있음을 알아보았다. 이번 글에서는 람다식을 많이 활용하는 stream 기능에 대해 알아보려한다. list.stream().forEach((k)->{ //forEach는 매개변수만 있으면 됨. System.out.println(5); }); 간단한 stream 예시문이다. stream은 for문 매우 흡사하다. 각각 하나의 요소들을 탐색하고, 요소들에 어떤 작업을 한다. 그럼 왜 for문이 기존에 있는데 굳이 stream을 쓰는지? 답은 람다식을 쓰는 이유와 같이 가독성에 있다. 리스트에 1234 요소가 있다면 Exception을 터트리는 예제다. for문과 if문을 사용한다면 위처럼 나뉘어져서 for문과 if문이 서로 어떤 연관이 있는지 쉽게 알아..
-
람다 1편) 람다의 시작 , 함수형 인터페이스 (@FunctionalInterface)Java 2023. 9. 14. 17:34
자바 8에는 새로운 기능들이 많이 추가되었는데, 그중 많이 쓰이는 람다에 대해 정리해보려한다. 본인도 람다에 대해 이해중인 과정이기에, 최대한 쉽게 풀어쓰는데 중점을 두려한다. 람다식을 '왜 쓰는지' 에 대해 먼저 살펴보자. 1. 먼저 람다를 쓰지 않는 경우 interface A { void method1(String k ); } class TestApplication { public static void main(String[] args) { A a = new A(){ @Override public void method1(String k) { System.out.println(k); } }; a.method1("test1"); } } A클래스를 오버라이딩하는 B클래스를 생성했다. 그렇다면 람다(람다 함..
-
Call by Value / Call by Reference (feat. primitive )Java 2023. 9. 13. 17:04
C/C++에는 주소값을 활용한 포인터 방식으로 대상을 찾아간다. 자바 또한 참조값(메모리 주소값)을 통해 찾아가는 방식이다. 두 방식은 거의 같아보이는데, 주요 차이점은 포인터는 메모리 주소를 임의로 변경할수 있고, 주소값을 직접 제어해서 변수간 이동하는 방식이다. 반면 자바는 jvm이 메모리를 관리해주기 때문에 메모리 주소 임의 변경이 불가능하고 메모리 주소를 맘대로 제어할 수 없다. JVM의 영역별 역할을 아는것이 call by ~를 이해하는 데 도움이 될것이다. Call by Value Primitive type 에는 가장 기본적인 int , long , char , boolean , byte, float, double 이 있다. 참조 주소값 없이, 실제 데이터만을 저장한다. 해당 변수들은 모두 j..
-
clone과 fork 를 기반으로 git 이해하기실전 개발해보기 2023. 8. 29. 18:01
모 사이트에서 진행하는 과제를 git을 통해 수행하려고했다. 그동안 나혼자 깃에 정리하고 개인프로젝트만 하다보니 fork,clone,pr 할 일이 없어서 이번에 좀 많이 헤맸다. fork & clone 이 뭐지? 중요한 차이점 '어디서 진행되는지'이다. Fork 먼저 알아보자. 우측에 Fork를 누르면 기존 레포지토리를 복사해서 내 레포지토리에 만들수 있다. 이름도 바꿀 수 있다. 그러면 이건 어디에 생기는가? 원격 저장소에 생긴다. 잠깐! Remote(원격 저장소) & Local (나만의 저장소) Remote 저장소는 Github,Gitlab과 같은 분산 저장소를 의미한다. 반면 Local 저장소는 내 컴퓨터에서 접근할수 있는 저장소를 의미한다. 위 그림을 보면 fork는 remote 저장소에서 복사해..