java라는 언어는 jvm 기반으로 동작하기 때문에 OS가 다르더라도 돌아간다. 하지만 java라는 언어만 사용해서 개발하면 좋겠지만 현실은 그렇지 않다. 연산량 많은 알고리즘이나 자바가 아닌 특정 언어에 특화되어서 어떤 기능을 제공하는 경우 다른 언어를 자바에서 써야 한다. 예를 들면 영상처리 알고리즘이나 누군가 구현한 암호화 알고리즘을 자바에서 쓰는 경우가 많다. 그런 경우에는 자바에서 다른 언어의 동적 라이브러리를 load해서 사용할 수가 있는데 이 경우에 자바 언어 자체의 단점을 보완하게 된다.
가장 큰 문제는 OS를 고려하여 빌드된 파일을 따로 가져야 한다는 것이다. 즉 빌드된 동적 라이브러리 형태가 OS마다 다르기에 배포 환경에 따라 라이브러리를 맞춰서 빌드해야 한다는 것이다. 요즘은 이런 번거로움에 대한 해결책이 나와서 윈도우도 wsl을 지원하지만 그것이 없던 시절에는 aws ec2에 리눅스 환경을 따로 마련하거나 듀얼 부팅으로 개발을 하던 시절이 있었을 것이다. 물론 wsl도 온전한 리눅스 환경을 그대로 제공할지는 의문이다.
단순히 윈도우 개발자들 기준에서는 별도의 리눅스용 빌드된 파일이 필요가 없겠지만 웹개발자들 기준에서는 대부분 리눅스에서 배포하기 때문에 리눅스용 빌드된 파일이 필요하고 빌드 방법을 알아야 한다. (아니면 그것을 아는 개발자가 따로 있거나..) cmake를 사용해서 딥러닝이나 opencv 소스 빌드를 하는것이 블로그에서 보면 명령어 몇 줄 입력하는 걸로 보여서 간단해 보이지만 사실 그거 하느라 하루 꼬박 날리는 경우도 있으니 돌아버릴 노릇이다.
그렇지만 배워두면 좋은 기술인데 뭔가 현재로선 압박감이 있다. docker라는 기술은 이에 대해서 좋은 제안을 하지만 이러한 것들을 잘 다루는 사람들만 보던 시니어들은 왜 이걸 바로 못하는지에 대해 눈치를 준다는 느낌을 받는다. 환경셋팅하는데만 왠종일 걸릴 것으로 예상되는데 왜 아직도 개발의 윤곽이 안나오는지는 많은 고민이 있는 것이다..