개발 공부 기록하기 108

[코틀린] val과 var 차이

Java에서는 새로운 변수를 만들 때 int number = 3; 처럼 [타입] [변수이름] = [할당될 값 또는 인스턴스]가 문법이었다. 하지만 Kotlin에서는 val number1 = 3 var number2 = 3 처럼 Java 문법상 [타입] 자리에 val 또는 var이 들어가게 된다. 둘의 차이는 간단하다. val : 한 번 선언하면 값이 바뀌지 않는다 (JS의 const) var : 한 번 선언한 이후 값을 바꿀 수 있다 (JS의 let) 예를 들어 number1과 number2를 수정했을때 아래와 같이 되는 것이다. number1 = 4 // 에러 number2 = 4 // 통과 Kotlin은 타입을 가고 있어 number1, numbere2에 대한 타입을 자동으로 추론한다 (즉 Int 타..

리액트 리덕스 정리

리액트 생태계에서 가장 사용률이 높은 상태관리 라이브러리, 컴포넌트의 상태 관련 로직들을 다른 파일들로 분리시켜 더욱 효율적으로 관리할 수 있고, 글로벌 상태 관리도 손쉽게 할 수 있다. Context API와 useReducer 훅을 사용해 개발하는 흐름과 리덕스를 사용하는 방식이 매우 유사하다. Context API와 리덕스 차이 미들웨어 리덕스의 미들웨어를 사용하면 액션 객체가 리듀서에서 처리되기 전에 우리가 원하는 작업들을 수행할 수 있다. 특정 조건에 따라 액션 무시 액션을 콘솔에 출력 혹은 서버쪽에 로깅 액션이 디스패치 되었을 때 이를 수정해서 리듀서에게 전달 특정 액션이 발생했을 때 이에 기반하여 다른 액션 발생 특정 액션이 발생했을 때 특정 JS 함수 실행 유용한 함수와 Hooks reac..

React Router 정리

출처 : velopert wiki // exact에 따라서 /** or /가 걸졍된다 소개 @Param 가져오기 const Profile = ({ match }) => { const { username } = match.params; } /* Profile을 사용하는 곳 */ Query 가져오기 : 라우트 컴포넌트에게 props 전달되는 location 객체에 있는 search 값에서 읽어올 수 있다. 이 값은 문자열로 되어 있어서 qs 라는 라이브러를 사용하면 쉽게 파싱할 수 있다. const About = ({ location }) => { const query = qs.parse(location.search, { ignoreQueryPrefix: true }); } 서브 라우트는 그냥 Route 컴..

React Styled Component 정리

올해 10월 초부터 생각했던 사이드 프로젝트를 본격적으로 만들어 보려고 한다 (이번엔 제발 런칭까지....) 리액트를 거의 3년만에 보게 되었는데 뭐 아주 그냥 새롭다. 이야 훅은 또 뭐야? 라떼는 클래스만 있었는데 이번 포스트에서는 리액트에서 스타일 지정하는 방법을 공부해 보았다. (react modern stack에 빠삭한 지인과의 카톡) REF : https://react.vlpt.us/styling/03-styled-components.html CSS in Js : JS 안에 CSS를 작성하는 것 리액트 진영에서 가장 인기 있는 CSS in JS 라이브러리가 바로 styled-components 이다. 설치 yarn add styled-components 사용 styled.태그이름 을 사용해서 바..

짧은 코멘트와 함께하는 이펙티브 자바) #20 추상 클래스보다는 인터페이스를 우선하라

짧은코멘트 요약을 잘해서 생략. 추상 클래스보다는 인터페이스를 왜 우선해야 하는지 어떤 경우에는 추상 클래스가 효과적일 수 있는지 잘 제시되어 있다. 추상 클래스보다는 인터페이스를 우선하라 자바가 제공하는 다중 구현 메커니즘은 인터페이스와 추상 클래스 두 가지이다. 둘의 가장 큰 차이는 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다는 점이다. 자바는 단일 상속만 지원하니, 추상 클래스 방식은 새로운 타입을 정의하는 데 제약을 안게 되는 셈이다. 인터페이스를 사용하면 장점이 몇 가지 있다. 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해 넣을 수 있다. 인터페이스는 믹스인 정의에 안성맞춤이다. 인터페이스로는 계층구조가 없는 타입 프레임워크를 만들 수 있다...

AWS Auto Scaling에 로드 밸런서 붙이기

안녕하세요 여러분! 공부하는 개발자입니다 ㅎㅎㅎ 저번 시간에 만들었던 Auto Scaling 그룹에 LB를 붙여보려고 합니다! LB를 붙이려면 대상 그룹이라는 것이 필요한데요! 바로 한 번 대상그룹부터 만들어보겠습니다. 대상그룹 대상 그룹은 LB에 들어온 요청을 전달 받는 '대상' 그룹이라고 할 수 있습니다! 대상 유형으로는 3개가 있습니다. 인스턴스 IP 주소 Lambda 함수 여기서는 우선 인스턴스를 골라보도록 하겠습니다! nginx를 80번으로 열어줄거라 HTTP 80을 골랐고요, VPC는 저번에 만들었던 EC2 Auto Scaling Group의 VPC와 동일한 VPC를 선택해 주었습니다! 다음은 상태 검사 방법과 추가적인 태그를 달 수 있는데요 HTTP /ping 경로로 상태체크를 사용하도록 했..

AWS 시작 템플릿 (Launch Template) 옵션 하나하나 살펴보기

안녕하세요~ 여러분 공부하는~개발자 입니다 ㅎㅎㅎ 오늘은 바로바로 에 대해서 집중적으로 알아보려 합니다. 이전 포스팅에서 Auto Scaling 그룹 만들때 필요했었는데 뭔가 이것저것 하다보니 그냥 되었죠 ㅋㅋㅋㅋ 그래서 이번 포스팅에서는 조금 더 디테일하게 까보려고 합니다 AWS 공식 문서와 만들어진 실행그룹을 보며 각 설정이 하나하나 어떤 뜻인지 들이파 보겠습니다. 우선 공식문서부터 바로바로 가보시죠~ 공식 문서 정리 우선 시작 템플릿이란 EC2 인스턴스 시작에 필요한 구성 정보를 모아둔 template 입니다. 이 시작 템플릿에는 버전이 있는데요 마치 저희가 코드 살짝 바꾸고 버전 올려서 배포하는 것과 비슷하다고 생각하시면 됩니다. 1 버전에서는 t2.small이었던 인스턴스 유형이 2버전에서 t2..

리액트 훅(React Hook) 정리

와 내가 react 배울때만 해도 hook이라는게 하나도 없었는데 (생각해보면 거의 2.5~3년 전이긴 하네...) 이제는 자료를 찾아봐도 hook 사용이 default가 된 것 같다... 사이드 프로젝트를 해볼까 하여 훅을 간단히 정리해 보았다. 훅 정리 리액트 버전 16.8에 추가되었으며, 함수형 컴포넌트에도 클래스형 컴포넌트의 기능을 사용할 수 있게 하는 기능이다. 새로 시작하는 프로젝트라면 클래스형 컴포넌트는 지양하고 훅을 사용하는 것이 좋다. useState : state 관리 function App() { // useState(초기값)으로 [state이름, setter]를 가져온다 // state에 객체가 들어갈 수도 있음 const [number, setNumber] = useState(0)..

짧은 코멘트와 함께하는 이펙티브 자바) #19 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라

짧은코멘트 Spring 애플리케이션 개발자가 상속을 할 일은 생각보다 많지 않다. 중복되는 필드가 있는 경우 데이터 구조를 표현하기 위한 정도...? 요즘에는 IDE가 원낙 잘 되어 있어 프로젝트에서 사용하는 모든 클래스에 final을 붙일 필요까지는 없는 것 같다. 같은 팀끼리는 의사소통이 잘 되는 측면도 있고... 몇몇 유틸성 클래스에 private constructor를 잘 달아주는 정도면 충분할 것 같다. 상속을 고려한 설계와 문서화 상속용 클래스를 설계하기란 결코 만만치 않다. 상속용 클래스를 만들려면 클래스 내부에서 스스로를 어떻게 사용하는지 (자기 사용 패턴) 모두 문서로 남겨야 한다. 이때 @implSpec 태그를 사용할 수 있다. 상속과 관련되어 문서화한 것은 그 클래스가 사용되는한 반드..

자바 동시성 자료 조사

문득 자바 Thread에 대하여 깊이 있게 알고 싶다는 생각이 들었다. Thread와 관련하여, 가지고 있는 Java 관련 책들이나 JDK docs를 읽으며 간단히 정리해보았다. 혼자 공부하는 자바 스레드가 사용중인 다른 객체를 다른 스레드가 변경할 수 없게 하려면 스레드 작업이 끝날 때까지 객체에 잠금을 걸어서 다른 스레드가 사용할 수 없도록 해야 한다. 임계 영역 : 멀티 스레드 프로그램에서 단 하나의 스레드만 실행할 수 있는 코드 영역 자바는 임계 영역을 지정하기 위해 동기화 메소드를 제공한다. public synchronized void method() { // 임계 영역 : 단 하나의 스레드만 실행 } 동기화 메소드는 메소드 전체 내용이 임계 영역이므로 스레드가 동기화 메소드를 실행하는 즉시 객..