They both express uncertainty and for a lot of things they can be interchanged, however, でしょう has a higher degree of certainty whereas かもしれない has a lower degree of certainty. Also, there are cases where using one over the other can sound weird, you'll just have to be familiar with enough situations so you can tell the difference.
With でしょう intonation also matters. If you intonate down, you are guessing, wondering. If you intonate up you are asking for agreement.
Intonation
魚の本でしょう It's a fish book, I suppose (intonate down)
魚の本でしょう it's a fish book, am I right?
Both of these are correct, but でしょう expresses a higher degree of certainty
雨が降るでしょう It might/will probably rain
雨が降るかもしれません It might/will probably rain
On a final note, both でしょう and かもしれない express a guess or uncertainty based on some limited information the speaker has, "It might rain (because the sky is dark)" "that's a fish book, I guess (because the cover has a fish on it)"
Hope that helps.