분류 전체보기

Effective Scala는 twitter에서 제작한 글로, 다른 언어의 Effective 시리즈와는 다르게 web에 게시되어서 배포됩니다.해당 글은 Marius Eriksen(트위터)가 적은 글로, 링크는 twitter github에서 제공해주고, 지속적으로 업데이트 된다고 합니다.twitter에서 scala를 사용하면서 느꼈던 점들이나 알아야 하는 점들을 적어둔 글로 한번쯤은 읽어볼만한 글입니다.한글로 번역한 글이 보이지 않아서 원문과 함께 나름대로 정리하면서 번역하려 합니다.번역에 대한 글이나 어떤 형식이든 코멘트는 환영합니다. (이미지는 chatgpt를 통해 제작되었습니다)
현재 개발중인 서비스가 akka를 사용중인데 외부와 http 통신할 때 akka-http-client를 사용하고 있습니다.이전까지는 크게 문제 없이 서비스에서 사용중이었는데, 점점 서비스가 성장하면서 TPS가 늘은 이후로 어느 순간부터 이상한 에러들이 자주 발생하고 서비스를 배포한 직후에 요청들이 대량으로 RequestTimeout 에러가 발생하는 현상이 나타났습니다.관련된 문제들과 수정 방법들을 정리합니다. AKKA http clientakka http client의 기본 동작을 먼저 설명하자면 akka http client는 모든 http 요청과 이에 대한 응답이 stream 방식으로 동작하게 설계된 모듈입니다.기본적으로 back-pressure 동작이 tcp layer, http layer를 넘어 ..
· Scala/언어
Scala는 국내에서는 도서나 영상 관련 자료들이 매우매우 빈약해서 제대로 공부하려면 영문 책 / 영문 사이트 / 영문 동영상들을 뒤져봐야 합니다.동영상이나 책은 제대로 배우려면 돈을 내고 사야해서 처음 도전한다면 그나마 영어 사이트를 추천합니다.제일 좋은 방법은 스칼라의 창시자 마틴 오더스키 교수님이 직접 쓰신 Programming in scala를 읽는 것인데 페이지만 920쪽을 넘어가서 처음에는 알려주는 사이트에서 간단하게 학습하기를 추천합니다. Scala schoolTwitter에서 Scala를 알려주기 위해 만든 사이트로 scala의 기초를 알려주며 난이도도 매우 낮은 사이트입니다. (링크)영문으로 챕터를 확인하면 제대로 나오는데 한글로 하면 따로 css 없이 화면이 나오지만 크게 문제되지는 않..
Fixture 관리테스트를 짜다보면 테스트 준비에 항상 공통으로 나오는 데이터들이 생기고 여기서 데이터를 조금만 바꿔서 코드를 짜게되는 상황이 자주 발생합니다.이럴때 사용할만한 팁이 몇 가지 있습니다. create function 생성제일 좋은 방법은 fixture 생성 함수를 trait로 만들고 이를 필요한 테스트마다 상속받아 공유하는 방법입니다.아래 코드는 간단한 예제입니다.case class Request(id: Long, target: Option[String], requestedAt: LocalDateTime)trait RequestFixture { def createRequest( id: Long, target: Option[String] = None, requestedA..
Intellij에 최신 업데이트가 생겼을경우 업데이트를 하고 싶다면 상단의 메뉴바에서 업데이트를 찾으면 됩니다. 메뉴바 최상단의 좌측에 있는 햄버거 메뉴를 눌러주고햄버거 메뉴를 누르면 펼쳐지는 메뉴들에서 Help -> Check for Updates를 누르면 됩니다.해당 메뉴를 누르면 가장 우하단에 update할지 말지 창이 나오는데, 여기서 update 누르시면 자동으로 업데이트가 시작됩니다.
· Scala/언어
implicit class는 마치 대상 타입을 확장하는 것과 같은 기능을 컴파일러 적으로 지원해주어 사용자가 더욱 효율적으로 코드를 짤 수 있게 도와줍니다.다만 이 기능은 대상 클래스를 감싸는 implicit class를 생성하는 문장을 암시적으로 끼워넣기 때문에 매 번 implicit class를 생성하는 부가 비용이 추가됩니다.이러한 부가 비용은 단순히 한 두 번 호출하는 정도로는 크게 상관이 없지만, 이를 자주 사용하는 상황에서는 어플리케이션에 조금씩이지만 누적되는 부담을 줍니다.이러한 부가 비용을 없애는 방법으로 implicit class를 value class로 바꾸는 방법이 존재합니다. value class설명하는 기준은 scala 2 기준입니다. scala 3를 사용중인 입장이라면 opaqu..
· Scala/언어
프로그래밍을 하다보면 수많은 함수를 만들게 되는데, 가끔식 객체나 값 자체에 만들어 둔 함수를 추가해서 항상 사용하고 싶을 때가 있습니다.예전에 만들어진 C나 C++과 같은 프로그래밍 언어에서는 지원하지 않지만 비교적 최근에 만들어진 Kotlin이나 C# 등의 최신 언어들은 이를 확장 함수라는 이름으로 제공해줍니다.Scala도 역시 유사하게 implicit class 라는 이름으로 이 기능을 제공해줍니다. implicit classScala는 2.10 이전에도 implicit 함수라는 이름으로 이러한 기능을 제공해주었습니다.이를 이용해 자체적인 라이브러리를 구현하고 외/내부 DSL을 지원해 줄 수 있어 편리하였지만 이를 한 군데 뭉쳐놓을 만한 곳이 존재하지 않아 상당히 귀찮기도 했습니다.이러한 변환을 더..
· Scala/언어
C++, java, kotlin 등 다양한 언어들에서는 컴파일 타임에 정의되는 상수를 정의하기 위해 const, constexpr, final 같은 키워드를 예약해두고 사용합니다.만약 constexpr int x = 55 같이 정의되어 있다면 x는 컴파일 타임에 55라고 정의되며 x가 사용된 모든 코드 위치는 55라는 숫자로 교체됩니다.scala에서는 상수를 어떻게 정의해야 할까요?이에 대한 규칙들이 너무 파편화되어있고 한 번에 알아보기도 어려워서 한 번 정리해보았습니다. Scala의 런타임 상수 정의scala에서 런타임에 정의되는 상수를 만들고 싶다면 단순히 val 키워드를 사용하면 됩니다.val을 사용하기만 해도 해당 변수의 재할당이 불가능해지므로 이것만으로도 런타임 상수로서의 정의가 됩니다.만약 v..
sleeptoy
'분류 전체보기' 카테고리의 글 목록 (4 Page)